2012-10-30 67 views
1

我需要您的幫助以進行以下操作。請注意,我正在使用SQL SERVER 2008. 我有一個表(下面),我們得到了從「Pickup」到「Dropoff」完成的作業數量。 要求是(輸出格式如下所述)。 1)獲取所有獨特的郵政編碼,而不管它們是放下還是皮卡。這會給我們所有的郵政編碼。 2)將從PICKUP完成的作業數量呈現給相應的DROPOFF。例如,我們從SE18郵政編碼中挑選兩位乘客,並將他們帶到SE18一次,SE19一次。它將從REQUIRED OUTPUT表中清除。X行數爲X列數

TABLE: 
JobID  Pickup  Dropoff 
==================================== 
1   SE18   SE18 
2   SE18   SE19 
3   SE2   SE18 
4   SE28   SE2 
5   AL1   SE7 
6   BR1   SE10 
7   NW1   TW16 
8   AL1   SE18 
9   BR6   AL1 
10   E6   BR1 
.   .   . 
.   .   . 
.   .   . 

的要求輸出如下所示:

REQUIRED OUTPUT 

    SE18 SE2 SE28 AL1 BR1 NW1 BR6 E6 SE19 SE7 SE10 TW16 .. 
    ========================================================================= 
SE18 1  -  -  -  -  -  -  -  1 0 0  0 
SE2 1  -  -  -  -  -  -  -  - - -  -   
SE28 -  1  -  -  -  -  -  -  - - -  -   
AL1 1  -  -  -  -  -  -  -  - 1 -  -  
BR1 -  -  -  -  -  -  -  -  - - 1  -   
NW1 -  -  -  -  -  -  -  -  - - -  1  
BR6 -  -  -  1  -  -  -  -  - - -  -  
E6  -  -  -  -  1  -  -  -  - - -  -  
SE19 -  -  -  -  -  -  -  -  - - -  -   
SE7 -  -  -  -  -  -  -  -  - - -  -  
SE10 -  -  -  -  -  -  -  -  - - -  -  
TW16 -  -  -  -  -  -  -  -  - - -  -  
. 
. 
. 

提前非常感謝。 親切的問候

+1

你會想看看PIVOT –

+0

@njk非常適合鏈接 –

+0

我已經使用Google搜索答案,看起來它與PIVOTing有關。由於我有很多郵政編碼,所以很難爲每個列做一個硬編碼條目。尋找更簡單的解決方案。 – user1001493

回答

3

這聽起來像這是你在找什麼。如果你想硬編碼值,查詢應該是這樣的:

select * 
from 
(
    select pickup, 
    dropoff, 
    dropoff d 
    from yourtable 
) x 
pivot 
(
    count(d) 
    for dropoff in ([SE18], [SE2], [SE28], [Al1], [BR1], 
       [NW1], [BR6], [E6], [SE19], [SE7], 
       [SE10], [TW16]) 
) p 

SQL Fiddle with Demo

如果你有一個未知的數值,那麼你可以使用動態SQL pivot值:

DECLARE @cols AS NVARCHAR(MAX), 
    @query AS NVARCHAR(MAX) 

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(Dropoff) 
        from yourtable 
      FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,1,'') 

set @query = 'SELECT pickup, ' + @cols + ' from 
      (
       select pickup, dropoff, 
        dropoff as countdropoff 
       from yourtable 
      ) x 
      pivot 
      (
       count(countdropoff) 
       for dropoff in (' + @cols + ') 
      ) p ' 

execute(@query) 

SQL Fiddle with Demo

+0

嗨bluefeet,謝謝你的幫助。 我得到一個錯誤在'('行'SET'Query ='Select ...('' '''')附近的語法不正確其實我已經改變了上面的查詢很多,並根據要求對它進行了tweeked。查詢和第一個@@ Cols被使用的地方,我得到了一個完整的列表,然而,在第二個「for dropoff in('+ @@ cols +');我沒有得到一個完整的郵遞列表。 親切的問候 – user1001493

+0

@ user1001493你可以用你的代碼編輯sql小提琴 - http://sqlfiddle.com/#!3/44fc1/1 - 然後在這裏發佈新鏈接嗎?很難說這個問題可能是什麼 – Taryn

+0

嗨Bluefeet,再次感謝請找到下面的鏈接,這個工具挺有意思的 http://sqlfiddle.com/#!3/03694/2 親切的問候 – user1001493