Sql server 2005 T-Sql查找重复的行值

Sql server 2005 T-Sql查找重复的行值,sql-server-2005,tsql,stored-procedures,Sql Server 2005,Tsql,Stored Procedures,我想写一个存储过程 在该存储过程中,我希望从一个表中找到重复的行值,并计算这些行对同一个表的求和运算 比如说,我有一个CustomerSales表 ID SalesRepresentative Customer Quantity 1 Michael CustA 55 2 Michael CustA 10 我需要把桌子转到 ID SalesRepresentative Customer Qua

我想写一个存储过程

在该存储过程中,我希望从一个表中找到重复的行值,并计算这些行对同一个表的求和运算

比如说,我有一个
CustomerSales

ID  SalesRepresentative Customer  Quantity 
1   Michael             CustA        55     
2   Michael             CustA        10
我需要把桌子转到

ID  SalesRepresentative Customer  Quantity 
1   Michael             CustA        65     
2   Michael             CustA        0
当我同时找到重复的
SalesRepresentative
Customer
时,我希望将这些行的所有
Quantity
值相加并分配给表的第一行,其他行将为“0”


你能帮我吗

将重复项聚合到一行中:

SELECT min(ID) AS ID, SalesRepresentative, Customer
      ,sum(Quantity) AS Quantity
FROM   CustomerSales 
GROUP  BY SalesRepresentative, Customer
ORDER  BY min(ID)
或者,如果您确实希望结果中包含
0
额外行作为
数量

SELECT ID, SalesRepresentative, Customer
      ,CASE 
          WHEN (count(*) OVER (PARTITION BY SalesRepresentative,Customer)) = 1
             THEN Quantity
          WHEN (row_number() OVER (PARTITION BY SalesRepresentative,Customer
                                   ORDER BY ID)) = 1 
             THEN sum(Quantity) OVER (PARTITION BY SalesRepresentative,Customer)
          ELSE 0
       END AS Quantity
FROM   CustomerSales
ORDER  BY ID
这使得大量使用

不带窗口功能的替代版本:

SELECT min(ID) AS ID, SalesRepresentative, Customer, sum(Quantity) AS Quantity
FROM   CustomerSales 
GROUP  BY SalesRepresentative, Customer

UNION ALL 
SELECT ID, SalesRepresentative, Customer, 0 AS Quantity
FROM   CustomerSales c
GROUP  BY SalesRepresentative, Customer
LEFT   JOIN (
    SELECT min(ID) AS ID
    FROM   CustomerSales 
    GROUP  BY SalesRepresentative, Customer
   ) x ON (x.ID = c.ID)
WHERE  x.ID IS NULL
ORDER  BY ID

是的,像这样的。我尝试了您的解决方案,并做了一些更改,
从CustomerSales中选择[SalesRep]、[Customer]、求和(数量)(按[SalesRep]、[Customer]划分)
除了一件事之外,它是有效的。它对相同的行值求和,但不将其他行设为“0”。订单由ID,[SaltReP],[客户] @ BurnuluSoo:请考虑我的答案的更新版本。是的,它绝对有效。第二个答案很好。。。谢谢你,欧文。OVER(PARTITION…不是光标,不是吗?@BertanULUSOY:这是窗口函数的语法。我添加了一个链接到我的答案。再次感谢,这是我第一次使用并实现该窗口函数。如果您发布代码、XML或数据示例,请在文本编辑器中突出显示这些行,然后单击“代码示例”按钮(
{}
)以很好地格式化和语法突出显示它!另外:它是一个存储过程-就像存储在SQL Server中一样-它与存储无关。。。