在SQL Server中使用group by获取多个相同的行

时间:2014-08-06 16:38:58

标签: sql sql-server group-by

以下代码返回:

DonorCenterDescription  Product         Pledge  
-----------------------------------------------
Avon                    Double Red      14
Avon                    Platelet        6
Avon                    Platelet        36
Avon                    Platelet        18
Avon                    Platelet        40
Avon                    Whole Blood     4
Avon                    Whole Blood     12
Avon                    Whole Blood     192

但我想每个产品只有一行(Double Red,Platelet,WholeBlood)。

我知道我获得了额外的行,因为具有产品信息的表格对每个产品都有多行:

Select
    L.DonorCenterDescription,
    P.Product,
    Count(I.DonorID) * P.Frequency As Pledge
From
    HemaConnectDailyFiles.dbo.IPledgeCallCodes I 
Inner Join
    DonorCenterCodeAssignedToDonorsMaster C On I.DonorID = C.DonorID 
Inner Join
    MarketingTempTables.dbo.FixedDCDesc L On C.DonorCenterCode = L.DonorCenterCode 
Inner Join
    MarketingTempTables.dbo.PledgeKey2014 P On I.IPICCallCodes = P.Code
Where
    Left(I.IPICCallCodes, 4) = '2014'
Group By 
    L.DonorCenterDescription, P.Product, P.Frequency
Order By
    L.DonorCenterDescription, P.Product

但我不知道怎么去:

Avon    Double Red      14
Avon    Platelet        94
Avon    Whole Blood     208

1 个答案:

答案 0 :(得分:3)

你需要一些澄清逻辑......这些不是重复的行,它们是在group by语句中有P.Frequency时被区分的行。

当AVON血小板有5行时,它会收到多个承诺值。您需要逻辑来确定要使用的p.frequency的值。

编辑:没有看到你的最终结果。 2个改动:

将承诺行更改为完整汇总:

sum(Count(I.DonorID) * P.Frequency)  as pledge 

编辑:这可能是您正在寻找的...不确定总和(count()*字段)是否有效。

sum(I.DonorID * P.Frequency)

- (我认为这将实现你想要的......如果不是你,你必须澄清2列DonorCenterDescription和产品计算承诺的逻辑

从语句

中删除组中的频率

- 最后,这就是你得到重复行的原因......这段代码明确说明L.DonorCenterDescription,P.Product,P.Frequency不仅仅是L.DonorCenterDescription,P的独特组合。像你想要的产品