2015-09-16 62 views
1

我的數據是這樣的:如何轉換/翻轉這個數據集呢?

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也許做了什麼?我是否在此留下任何信息或者是否足夠簡單?

+0

是,樞軸能做到這一點 – lad2025

+0

我找不到做一些簡單的類似樞軸的任何實例對此。 : -/ – CodingIsSwell

+0

我不知道如何使它佔空白。事實上,我無法得到一個可以工作的例子,我不知道該怎麼做。 – CodingIsSwell

回答

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

你釘死了! IIF()部分以及Row_Number部分對我來說都是新的。我仍然對MAX()部分如何處理這個問題感到困惑。在我看來,它將被用作數據的總結,而不是它如何實際出現。但是,無論如何,這非常酷,非常感謝你的幫助! – CodingIsSwell

+1

'IIF'可以改爲'ISNULL(銷售,'')','MAX()'只是爲了得到一個值,因爲'PIVOT'需要聚合函數,'ROW_NUMBER'是簡單的等級函數。快樂,我可以幫助:) – lad2025