Sql server 2012 如何转换/翻转此数据集的侧面?
我的数据如下所示:Sql server 2012 如何转换/翻转此数据集的侧面?,sql-server-2012,Sql Server 2012,我的数据如下所示: PhoneNumber | Department 9495551234 | Sales 9495554598 | Sales 9494582045 | Sales 9495639842 | Sales 9496573952 | Accounting 9498730956 | Marketing 9498346620 | Marketing Sales | Accounting | Marketing 9495551234 | 949657
PhoneNumber | Department
9495551234 | Sales
9495554598 | Sales
9494582045 | Sales
9495639842 | Sales
9496573952 | Accounting
9498730956 | Marketing
9498346620 | Marketing
Sales | Accounting | Marketing
9495551234 | 9496573952 | 9498730956
9495554598 | <blank> | 9498346620
9494582045 | <blank> | <blank>
9495639842 | <blank> | <blank>
我希望数据如下所示:
PhoneNumber | Department
9495551234 | Sales
9495554598 | Sales
9494582045 | Sales
9495639842 | Sales
9496573952 | Accounting
9498730956 | Marketing
9498346620 | Marketing
Sales | Accounting | Marketing
9495551234 | 9496573952 | 9498730956
9495554598 | <blank> | 9498346620
9494582045 | <blank> | <blank>
9495639842 | <blank> | <blank>
这可能是用枢轴完成的吗?我是否在这里遗漏了任何信息,或者这已经足够直截了当了?您可以使用PIVOT
查询:
;WITH cte AS
( SELECT
PhoneNumber,
Department,
[rn] = ROW_NUMBER() OVER(PARTITION BY Department ORDER BY (SELECT 1))
FROM tab
)
SELECT
[Sales] = IIF(Sales IS NOT NULL, Sales, '<blank>')
,[Accounting] = IIF(Accounting IS NOT NULL, Accounting, '<blank>')
,[Marketing] = IIF(Marketing IS NOT NULL, Marketing, '<blank>')
FROM cte
PIVOT
(
MAX(PhoneNumber)
FOR Department IN (Sales, Accounting, Marketing)
) AS p;
是的,Pivot可以做到这一点。我找不到任何Pivot的例子可以做到简单和类似的事情-/我不知道如何解释这些空白。事实上,我根本无法让一个例子起作用,我也不知道该怎么办。你说得对!IIF部分和行数部分对我来说都是新的。我还不清楚MAX part是如何处理这个问题的。在我看来,它将被用作数据的摘要,而不是数据的实际结果。但是,无论如何,这很酷,非常感谢你的帮助!IIF可以改为ISNULLSales,MAX只用于获取一个值,因为PIVOT需要聚合函数,而ROW_NUMBER是简单的秩函数。很高兴我能帮忙: