Sql server 如何在动态数据透视查询中执行左连接,使其仍然返回行

Sql server 如何在动态数据透视查询中执行左连接,使其仍然返回行,sql-server,pivot-table,Sql Server,Pivot Table,我的数据透视表仅在表tempCounts中有数据时工作,因为我正在执行内部联接 无论tempCounts表是否有匹配的记录,如何返回行?有时tempCounts表是空的,但我仍然需要从Users表返回记录 我试着使用左连接,但它不起作用,我猜是因为pivot子句。也许我误解了你的示例,但我不认为左连接和pivot组合是你的问题,我设计了一个简单的测试用例,请原谅缩短的名称,它工作得很好 with cteCust as ( SELECT * FROM (VALUES ('Alice', 2

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

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


我试着使用左连接,但它不起作用,我猜是因为pivot子句。

也许我误解了你的示例,但我不认为左连接和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
它甚至为在所需区域中没有匹配项或在TempCount中没有匹配项的用户提供结果行

有没有可能某些区域名不能产生好的列名

或者,使用此输出的任何东西都会遇到空值问题


也许@cols的格式不正确?

谢谢。嘿,好奇,有没有可能合并两列作为动态列名?就像您的示例中的列Regn一样。假设有另一个列,你能合并这些列,使标题具有类似于Regn++RegnCode+的内容吗?我试过了,但没有成功。@coolbreeze,我不确定,但我想是的。您可以为列设置别名,以便标题显示更多信息,因此我认为您可以通过编程方式生成它。您需要从ACols中为AtSignAColHeads形成一个函数,并在从枢轴拉动的选择中使用AColHeads。它将给出一个选择,看起来像这个选择部分,年龄,美国为[US13],欧盟为[EU21]。你是如何生成acol的?请尽你所能向我汇报,我对这里能做些什么很感兴趣。
Part    Age US  EU
Alice   25  5   2
Bob 22  NULL    NULL
Chris   27  NULL    NULL
Doug    21  NULL    13
Eve 28  1   NULL