繁体   English   中英

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

[英]Self-join a table to merge multiple rows in to one row

我对SQL非常陌生,从未做过任何复杂的事情。 任何帮助,将不胜感激。

我在表中有以下数据:

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

我的输出需要是

ID - U  - N
1  - 3  - 2

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

谢谢你的时间。

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需要双引号的地方使用了方括号。

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

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM