如何在我的动态数据透视查询中执行左联接,以便它仍然返回行



我的数据透视表只有在表中有数据(tempCounts(时才能工作,因为我正在执行内部联接。

无论#tempCounts表是否有匹配的记录,如何返回行?有时#tempCounts表是空的,但我仍然需要返回Users表中的记录。

SET @query
= N'SELECT  
ParticipantEmail,
Age,' + @cols
+ 
N' 
from (
SELECT
u.ParticipantEmail,
u.Age,
tc.RegionName,
tc.Count
FROM Users u
INNER JOIN #tempCounts tc ON ee.ParticipantEmail COLLATE DATABASE_DEFAULT = tc.CustomerEmail
) x
pivot 
(
sum(Count)
for RegionName in (' + @cols + N')
) p ';

我试着使用左联接,但由于pivot子句的原因,它不起作用。

也许我误解了你的例子,但我不认为LEFT JOIN和PIVOT组合是你的问题,我做了一个简单的测试用例(请原谅缩写的名称(,它运行良好

with cteCust as (
SELECT * FROM (VALUES ('Alice', 25), ('Bob', 22)
, ('Chris', 27), ('Doug', 21), ('Eve', 28)
) as Cust (Part, Age)
), cteTempCount as (
SELECT * 
FROM (VALUES 
('Alice', 'US', 5), ('Alice', 'EU', 2), ('Alice', 'GB', 4) 
, ('Chris', 'GB', 3), ('Chris', 'JP', 6)
, ('Doug', 'JP', 7), ('Doug', 'EU', 4), ('Doug', 'EU', 9)
, ('Eve', 'US', 1), ('Eve', 'GB', 2),  ('Eve', 'JP', 5)
) as TC(Part, Regn, RCount)
) 
SELECT Part, Age, US, EU
FROM (SELECT u.Part, u.age, Regn, RCount FROM cteCust as U 
LEFT OUTER JOIN cteTempCount as TC on U.Part = TC.Part) as X
PIVOT (SUM(RCount) FOR Regn in (US, EU)) as P;

给出结果

Part    Age US  EU
Alice   25  5   2
Bob 22  NULL    NULL
Chris   27  NULL    NULL
Doug    21  NULL    13
Eve 28  1   NULL

这甚至为在期望区域中没有匹配(Chris(或在TempCount中没有匹配的用户(Bob(提供了结果行。

有没有可能某些RegionNames的列名不好?

或者,消耗这个输出的东西可能有NULL值的问题?

也许@cols的格式不正确?

最新更新