首页 > 解决方案 > 如何对基于正负列值的数据(在 SQL 服务器上)进行分组?

问题描述

我有这张桌子->

+----+-----------+-----------+
| id |  gainOnX  |  gainOnY  |
+----+-----------+-----------+
|  1 |        10 |        10 |
|  1 |        -5 |         5 |
|  2 |        -5 |       -10 |
|  2 |       -10 |         5 |
+----+-----------+-----------+

我需要按 id 对这些数据进行分组,但我需要 4 列

  1. 正 x 的总和(x 的总利润)
  2. 负 x 的总和(x 上的总损失)
  3. 正 y 的总和(y 的总利润)
  4. 负 y 的总和(y 上的总损失)

所以它应该看起来像这样 ->

+----+---------+-------+---------+-------+
| id | profitX | lossX | profitY | lossY |
+----+---------+-------+---------+-------+
|  1 |      10 |    -5 |      15 |     0 |
|  2 |       0 |   -15 |       5 |   -10 |
+----+---------+-------+---------+-------+

标签: sqlsql-server

解决方案


我想你只想要条件聚合:

select id,
       sum(case when gainOnX > 0 then gainOnX else 0 end),
       sum(case when gainOnX < 0 then gainOnX else 0 end),
       sum(case when gainOnY > 0 then gainOnY else 0 end),
       sum(case when gainOnY < 0 then gainOnY else 0 end)
from t
group by id;

推荐阅读