自联接表以将多行合并到一行

时间:2012-02-14 05:00:45

标签: sql

我是SQL的新手,从来没有像这样做过任何复杂的事情。任何帮助将不胜感激。

我在表格中有以下数据:

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

我的输出需要

ID - U  - N
1  - 3  - 2

基本上我的输出需要计算ID的N和U,并为该ID生成一行。

感谢您的时间。

2 个答案:

答案 0 :(得分: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

更新:

另一张海报(见下文)指出我使用方括号,其中一些RDBMS需要双引号。

答案 1 :(得分:1)

在MySQL中,这比你想象的要简单:)

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),根据标记是否具有值“U”或“N”,它将具有1或0。这导致如下:

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

希望这有帮助。