有没有办法只在行满足某些条件时求和?如果行不满足某些条件,则必须将它们复制到新表中。例如,如果我有这张table
| id | A | B |
--------------
| 1 | a | 2 |
| 1 | b | 4 |
| 1 | c | 1 |
| 2 | a | 4 |
| 3 | a | 1 |
| 3 | b | 5 |
我想要这样的输出
| id | A | B |
--------------
| 1 | a,b | 6 |
| 1 | c | 1 |
| 2 | a | 4 |
| 3 | a,b | 6 |
仅当列“a”是“a”或“b”时,它才会求和;如果列“c”是“c”,它只会复制值
2条答案
按热度按时间jv4diomz1#
你的例子并没有说明所有可能的情况。
但我认为也许你不需要把解决方案复杂化
UNION
http://sqlfiddle.com/#!9/d473d3/6号mlnl4t2r2#
您可以在两个不同的select查询中执行此操作。在第一个select查询中,只考虑以下情况
A
具有值“a”或“b”。在第二个select查询中,考虑其余的值(A NOT IN ('a','b')
)使用
UNION ALL
将结果合并到派生表中。将派生表结果集按升序排序
id
.我们使用聚合函数,比如
Group_concat()
以及Sum()
获取逗号分隔的字符串(对于a和b),以及B
值。请尝试以下操作: