如何转换/翻转这个数据集?

时间:2015-09-16 18:13:30

标签: sql-server-2012

我的数据如下:

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完成的吗?我在这里留下任何信息还是这么直接?

1 个答案:

答案 0 :(得分:1)

您可以使用PIVOT

<强> SqlFiddleDemo

CREATE TABLE tab(PhoneNumber NVARCHAR(20), Department NVARCHAR(100));

INSERT INTO tab(PhoneNumber, Department)
VALUES
('9495551234'  , 'Sales'),
('9495554598'  , 'Sales'),
('9494582045'  , 'Sales'),
('9495639842'  , 'Sales'),
('9496573952'  , 'Accounting'),
('9498730956'  , 'Marketing'),
('9498346620'  , 'Marketing');

查询:

;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;