sql-server - Sum、Group by 和 Null
问题描述
我正在深入研究 SQL。我有下表
+------+----+------+------+-------+
| Type | ID | QTY | Rate | Name |
+------+----+------+------+-------+
| B | 1 | 1000 | 21 | Jack |
| B | 2 | 2000 | 12 | Kevin |
| B | 1 | 3000 | 24 | Jack |
| B | 1 | 1000 | 23 | Jack |
| B | 3 | 200 | 13 | Mary |
| B | 2 | 3000 | 12 | Kevin |
| B | 4 | 4000 | 44 | Chris |
| B | 4 | 5000 | 43 | Chris |
| B | 3 | 1000 | 26 | Mary |
+------+----+------+------+-------+
我不知道如何利用 Sum 和 Group by 来实现以下结果。
+------+----+------+------+-------+------------+
| Type | ID | QTY | Rate | Name | Sum of QTY |
+------+----+------+------+-------+------------+
| B | 1 | 1000 | 21 | Jack | 5000 |
| B | 1 | 3000 | 24 | Jack | Null |
| B | 1 | 1000 | 23 | Jack | Null |
| B | 2 | 3000 | 12 | Kevin | 5000 |
| B | 2 | 3000 | 12 | Kevin | Null |
| B | 3 | 200 | 13 | Mary | 1200 |
| B | 3 | 1000 | 26 | Mary | Null |
| B | 4 | 4000 | 44 | Chris | 9000 |
| B | 4 | 5000 | 43 | Chris | Null |
+------+----+------+------+-------+------------+
任何帮助表示赞赏!
解决方案
您可以使用窗口功能:
select t.*,
(case when row_number() over (partition by type, id order by name) = 1
then sum(qty) over (partition by type, id order by name)
end) as Sum_of_QTY
from table t;
推荐阅读
- arrays - 如何映射 JSON 以在 ReactJS 中创建数组?
- php - 从 foreach 循环 PHP 中删除特定的迭代
- c# - 尝试正确设置 2 个 csv 文件匹配的查询被卡住了
- javascript - GraphQl 解析器的上下文未定义
- entity-framework-core - 实体框架更改列删除行为而不丢失数据
- r - 为什么 R pwr.2p.test 给出的样本量与 G*Power 不同?
- python - Pytorch 不显示 Gpu(Yolov5)
- api - 如何将 API 令牌传递到后端
- python-3.x - AttributeError:“_io.TextIOWrapper”对象没有属性“fp”
- reactjs - ReactJS:导入数据后重新绘制图表不呈现线条