SQL Server总和用于不同的记录

时间:2014-08-12 10:25:36

标签: sql sql-server

我有一张这样的桌子(我希望你能理解)

ProductID    BoxNo     Qty   
   A         1          3
   A         1          3
   A         1          3
   B         1          2 
   B         1          2
   B         2          1
   C         1          1

如您所见,产品A,包装盒1的数量为3,然后在表格中显示3次,产品B,包装盒#1的数量为2,显示2次,依此类推... < / p>

我希望我的结果像这样

ProductID    Max(BoxNo)  Total
   A          1          3
   B          2          3
   C          1          1

使用此查询

Select distinct productid, max(BoxNo), sum(qty) as Total from [Table1] group by productid order by productid

结果将是

ProductID    Max(BoxNo)  Total
   A          1          9
   B          2          5
   C          1          1

如果你想知道为什么我不只是使用计数它是因为有时候会有一个数量为10的列只出现一次,如果算上那个,它将被计为1而不是10

2 个答案:

答案 0 :(得分:2)

您可以将此视为选择后应用了distinct。您的查询(没有明确的):

 select pid, max(box), sum(qty) from t group by pid order by pid

结果为1行:

 A             1           9

明显不会有任何影响。您可以在聚合之前应用distinct,如:

select pid, max(box), sum(qty) from (
    select distinct pid, box, qty from t
) group by pid order by pid

或使用distinct进行计数:

select pid, max(box), sum(distinct qty) from t group by pid order by pid

为什么表格中有重复的行?

答案 1 :(得分:1)

也许这就是你想要的东西?

SELECT 
    ProductID, 
    MAX(BoxNo) AS MaxBoxNo, 
    SUM(Qty) AS TotalQuantity 
FROM (SELECT DISTINCT * FROM Table1) YourTable
GROUP BY ProductID

Sample SQL Fiddle