我想使用左连接加入两个表,但结果不是我所期待的。
SELECT name, date, COALESCE(NumberOfPosts, 0) AS NumberOfPosts
FROM categories c
LEFT JOIN (SELECT cat_id, COUNT(*) AS NumberOfPosts
FROM posts
GROUP BY cat_id) p ON c.id = p.cat_id
无效。 EMP_ID is_selected
仍会显示。
我不知道我的查询有什么不对,请你帮忙吗?
004
表a
SELECT DISTINCT a.Type,
COALESCE(a.EMP_ID, b.EMP_ID) AS ID,
a.Deduction_No,
a.Home_Amt,
a.Deduction_Amt,
a.Group_ID,
b.Is_Selected
From Table a
LEFT JOIN TABLE b(a.Deduction_No = b.Deduction_No)
WHERE Is_Selected = 'Y'
表b
Deduction_No Type GROUP_ID EMP_ID Service_code AMT
V1001 EMP 001 D1008 10
V1001 GRP G185 NULL C1009 20
V1001 GRP G185 NULL C1009 35
V1001 GRP G185 NULL C1009 20
输出错误
Deduction_No GROUP_ID EMP_ID Is_Selected AMT
V1001 G185 001 Y 20
V1001 G185 001 N 0
V1001 G185 002 Y 35
V1001 G185 002 N 0
V1001 G185 003 Y 20
V1001 G185 003 N 0
V1001 G185 004 Y 20
V1001 G185 004 N 20
期望的输出
Deduction_No Type GROUP_ID EMP_ID Service_code AMT Is_Selected
V1001 EMP 001 D1008 10 Y
V1001 GRP G185 001 C1009 20 Y
V1001 GRP G185 002 C1009 35 Y
V1001 GRP G185 003 C1009 20 Y
V1001 GRP G185 004 C1009 95 Y
谢谢
答案 0 :(得分:0)
如果有效,请检查一下:
SELECT DISTINCT a.Type_cd,
COALESCE (a.EMP_ID,b.EMP_ID) AS ID,
a.Deduction_No,
a.Group_ID,
a.Service_code,
b.Is_Selected,
SUM(a.AMT)
FROM supplier_app.a a
RIGHT OUTER JOIN (Select Deduction_No,GROUP_ID,EMP_ID,Is_Selected FROM supplier_app.b WHERE Is_Selected ='Y' GROUP BY Deduction_No,GROUP_ID,EMP_ID,Is_Selected) b ON (a.Deduction_No = b.Deduction_No)
Group by a.Type_cd,ID,
a.Deduction_No,
a.Group_ID,
a.Service_code,
b.Is_Selected;
以下是答案:
Type ID Deduction_No GROUP_ID Service_code delete_ind Sum(AMT)
-------------------- ---------- ------------ ---------- ------------ ---------- -----------
EMP 001 V1001 ? D1008 Y 40
GRP 001 V1001 G185 C1009 Y 75
GRP 002 V1001 G185 C1009 Y 75
GRP 003 V1001 G185 C1009 Y 75
GRP 004 V1001 G185 C1009 Y 75
答案 1 :(得分:0)
我认为您的查询工作正常。看看这个SQLFiddle here,它会根据您的样本数据显示结果是否正确返回。
如果您注释掉WHERE
子句,您将获得N
的{{1}}值(显然)。
我认为您的IS_SELECTED
表格中有一行符合B
条件的额外行并返回结果。
您可以通过运行以下查询来检查是否有这个符合此条件的额外行:
JOIN