2012-02-14 44 views
0

我對SQL非常陌生,從未做過任何複雜的事情。任何幫助,將不勝感激。自加入表將多行合併到一行中

我在表格下面的數據:

ID - TAG 
1 - U 
1 - N 
1 - U 
1 - N 
1 - U 

我的輸出要求是

ID - U - N 
1 - 3 - 2 

基本上我的輸出需要數N和將U的ID,併產生一個單獨的行,即ID。

謝謝你的時間。

+1

什麼DBMS? MySQL的? – 2012-02-14 05:04:14

+1

你正在使用什麼數據庫? – Thilo 2012-02-14 05:04:22

回答

2
SELECT 
    ID, 
    COUNT(CASE WHEN TAG = 'U' THEN 1 END) AS [U], 
    COUNT(CASE WHEN TAG = 'N' THEN 1 END) AS [N] 
FROM 
    someTable 
GROUP BY 
    ID 

UPDATE:

另一個海報(見下文)指出,我用方括號,其中一些RDBMS中使用雙引號。

+0

+1適用於任何應用場合的通用解決方案。您可能想要注意,您使用的是SQL Server的引用約定,而不是標準引用。 – 2012-02-14 05:11:08

+0

謝謝。我甚至沒有注意到(隧道視野)。 – 2012-02-14 05:12:43

+0

我正在談論'[U]'和'[N]',標準SQL會希望使用帶引號的標識符「U」和「N」。我很確定每個人都對字符串文字的單引號感到滿意(至少我希望如此)。但是,是的,隧道視覺:) – 2012-02-14 05:23:08

1

在MySQL中,這是simplier比你想象:)

select id, 
    sum(if(tag = 'U', 1, 0)) as U, 
    sum(if(tag = 'N', 1, 0)) as N 
from table1 
group by id 

基本上,每個ID你創建一個新的列(U和N)將基於是否標記有1或0具有「U」或「N」的值。這導致了這樣的事情:

+----+---+---+ 
| ID | U | N | 
+----+---+---+ 
| 1 | 1 | 0 | 
| 1 | 0 | 1 | 
| 1 | 1 | 0 | 
| 1 | 0 | 1 | 
| 1 | 1 | 0 | 
+----+---+---+ 

現在,我們需要做的就是通過ID組和距離U和N總結所有的值,我們得到:

+----+---+---+ 
| ID | U | N | 
+----+---+---+ 
| 1 | 3 | 2 | 
+----+---+---+ 

希望這有助於。