自加入表将多行合并到一行中

问题描述:

我对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

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

在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 | 
+----+---+---+ 

希望这有助于。