mysql 在两个表中查找缺失数据/无数据输入的SQL查询[已关闭]

57hvy0tb  于 2022-12-22  发布在  Mysql
关注(0)|答案(1)|浏览(256)

已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题?**添加详细信息并通过editing this post阐明问题。

8天前关闭。
Improve this question
我们有两张table:
具有以下字段的客户表:客户ID、交易ID、客户名称
交易表:事务处理ID、事务处理名称
输出客户没有的事务的sql查询。
我试过表的左连接,但没有用。
请参阅图片以了解示例客户表

交易表

结果/预期表

我试过trans_id为空的左连接,但没有成功。

lmyy7pcs

lmyy7pcs1#

在这种情况下,连接是不够的。
您正在从两个不同的表中获取两个维。需要使用聚合来与一个集进行比较,以查看哪些存在,哪些不存在。

  • 首先,按Customerid/CustomerName和TransactionName进行聚合。
  • 然后,按TransactionName透视数据

质询

CREATE table aggresult
(
  CustomerName varchar(50),
  TransactionName varchar(50),
  Count int
);

insert into aggresult(CustomerName,TransactionName,Count)
select C.CustomerName,T.TransactionName, Count(1)
from Transaction T
JOIN customer C on(T.TransactionId=C.TransactionId and T.TransactionId=C.TransactionId ) 
group by C.CustomerName,T.TransactionName;

select CustomerName,
 MAX(CASE WHEN aggresult.TransactionName = "cash" THEN aggresult.Count END) "cash",
 MAX(CASE WHEN aggresult.TransactionName = "credit" THEN aggresult.Count END) "credit",
 MAX(CASE WHEN aggresult.TransactionName = "non cash" THEN aggresult.Count END) "non cash",
 MAX(CASE WHEN aggresult.TransactionName = "return" THEN aggresult.Count END) "return"
from aggresult
group by CustomerName;

结果如下所示:
Pivot Data by TransactionName
Pastebin

相关问题