首页 > 解决方案 > 如果存在具有不同值的列,SQL Server 如何使用组?

问题描述

先看看我的桌子

IDMutasi     ItemID ItemCode    ItemName    Lokasi  Seri    Quantity
1           10      kode1       nama1       A1      001     50
2           10      kode1       nama1       A1      002     100
3           10      kode1       nama1       A2      001     50
3           10      kode1       nama1       A2      003     150
3           10      kode1       nama1       A2      003     150
4           11      kode2       nama2       A1      011     50
5           11      kode2       nama2       A1      011     150
6           12      kode3       nama3       A3      012     200

让我们说上表的 sql 是:

select * from tb_mutasi

我想让上面的表格变成这样:

ItemID  ItemCode    ItemName    Lokasi  Seri    Quantity
10      kode1       nama1       A1      001     50
10      kode1       nama1       A1      002     100
10      kode1       nama1       A2      001     50
10      kode1       nama1       A2      003     300
11      kode2       nama2       A1      011     200
12      kode3       nama3       A3      012     200

上表中没有重复,如果 ItemCode、Lokasi 和 Seri 相同,则数量将增加。对于数量,我可以使用它,SUM但是每当我使用时,无论我使用来自 Seri 还是 Lokasi 的组,group by我总是会出错,我总是会得到这个结果。is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause

知道该怎么做吗?

标签: sql

解决方案


这是根据您的描述和示例数据查询的工作组:

SELECT
    ItemID,
    ItemCode,
    ItemName,
    Lokasi,
    Seri,
    SUM(Quantity) AS Quantity
FROM tb_mutasi
GROUP BY
    ItemID,
    ItemCode,
    ItemName,
    Lokasi,
    Seri;

SQL Server 中的要求GROUP BY是出现在 select 子句中的每一列出现在GROUP BY子句中,或者是一个聚合。因此,我们可以选择SUM(Quantity),因为它是一个聚合,即使Quantity它没有出现在GROUP BY.


推荐阅读