以下代码返回:
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
答案 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的独特组合。像你想要的产品