2015-12-30 40 views
0

我不知道我怎樣才能取一個數據集,看起來像這樣:合併重複的行成1行多列

表1:

RecordID Code 
A 351 
A 352 
A 353 
A 354 

看起來像這樣:

表2:

你已經可以假設我創建了第二個表格,其中包含我在下面創建的列標題

RecordID 351 352 353 354 355 356 
    A   Y Y Y Y N N 

非常感謝您的幫助。

+0

這RDBMS是這個呢?請添加一個標籤來指定您是使用'mysql','postgresql','sql-server','oracle'還是'db2' - 或者其他的東西。 –

+0

我正在使用SQLServer 2012 – WillT2118

回答

0

你可以嘗試這樣的事:

select 
    RecordID, 
    iif(sum(iif([Code]=351,1,0))>0,'Y','N'), 
    iif(sum(iif([Code]=352,1,0))>0,'Y','N'), 
    iif(sum(iif([Code]=353,1,0))>0,'Y','N'), 
    iif(sum(iif([Code]=354,1,0))>0,'Y','N'), 
    iif(sum(iif([Code]=355,1,0))>0,'Y','N'), 
    iif(sum(iif([Code]=356,1,0))>0,'Y','N') 
from table 
group by RecordID 
+1

這是一個有趣的做法。爲什麼不使用'max(當代碼= 351時的情況,然後'Y'else'N'結束)' – Lock

+0

@Lock在這種情況下,我們將取決於ascii代碼的順序,如果我們需要本地化或使用其他符號呢? –

+1

@Lashlane。不知道我看到本地化與此有關嗎?不要誤解我的意思..我不是說你的錯誤..只是從來沒有見過這樣做,對我而言,意圖不明確。你能解釋這是如何影響ascii代碼的順序的嗎? – Lock

1
SELECT RecordID, 
    CASE WHEN SUM(CASE WHEN Code = 351 THEN 1 ELSE 0 END) = 1 THEN 'Y' ELSE 'N' AS [351], 
    CASE WHEN SUM(CASE WHEN Code = 352 THEN 1 ELSE 0 END) = 1 THEN 'Y' ELSE 'N' AS [352], 
    CASE WHEN SUM(CASE WHEN Code = 353 THEN 1 ELSE 0 END) = 1 THEN 'Y' ELSE 'N' AS [353], 
    CASE WHEN SUM(CASE WHEN Code = 354 THEN 1 ELSE 0 END) = 1 THEN 'Y' ELSE 'N' AS [354], 
    CASE WHEN SUM(CASE WHEN Code = 355 THEN 1 ELSE 0 END) = 1 THEN 'Y' ELSE 'N' AS [355], 
    CASE WHEN SUM(CASE WHEN Code = 356 THEN 1 ELSE 0 END) = 1 THEN 'Y' ELSE 'N' AS [356] 
FROM yourTable 
GROUP BY RecordID 
+0

謝謝你們!這是有道理的,應該工作,生病給它一個鏡頭。 – WillT2118