我在前言中说我是SQL的新手,并且由于Stack Overflow而一直在学习这个工作。
我正在运行多个表中的查询(总共3个),我试图在一行中获取每个唯一标识符的结果。其中一个表项有多个返回,我可以将它写入它们在自己的列中显示为max命令的位置;但是,它仍会为同一标识符返回多行。
这是我到目前为止所拥有的:
SELECT tbl.1.field as ID, tbl.2.field as Name, tbl.2.fieldb as Product,
COUNT(*) AS ConfirmedSales
MAX(CASE WHEN tbl.3.field = 'Product1' then 1 else 0 end) as CustomCol1
MAX(CASE WHEN tbl.3.field = 'Product2' then 1 else 0 end) as CustomCol2
FROM tbl.2
LEFT JOIN tbl.2 on tbl.2.x = tbl.1.x
INNER JOIN tbl.3 on tbl.2.x = tbl.3.x
WHERE ((tbl.1.date between '01/01/2014 00:00:00' and 06/30/2014 23:59:59'))
GROUP BY tbl.1.field, tbl.2.field, tbl.2.fieldb
结果返回如下:
Row |ID |Name |CustomCol1 |CustomCol2
1 |8048 |Jon Smith |1 |0
2 |8048 |Jon Smith |0 |1
3 |4044 |Max Williams |0 |0
如果ID相同,我希望CustomCol1和CustomCol2的结果共享同一行。这可能吗?
答案 0 :(得分:0)
考虑将您的案例移动到子查询中,如下所示:
SELECT t.ID, t.name, MAX(s.custom1) AS custom1, MAX(custom2) AS custom2
FROM #tbl1 t
INNER JOIN (SELECT personID
,CASE WHEN s.product = 'product1' THEN 1 ELSE 0 END custom1
,CASE WHEN s.product = 'product2' THEN 1 ELSE 0 END custom2
FROM #sales s) s ON t.ID = s.personID
GROUP BY t.ID, t.Name
这可以防止您看到的重复。如果你的最终目标是别的,那么,给我们一些更多信息,我相信有人会得到一个好的答案。