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是简单的秩函数。很高兴我能帮忙: