我的数据透视表只有在表中有数据(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的格式不正确?