与内部联接分组按子句求和



我有两个表,MasterChild.我需要Master表中列Cash的总和,并且我正在引用Child表以匹配某些条件。

Master表:

 ID    CASH        BillDate     
 1     100         22-02-2014      
 2     200         22-02-2014 

Child表:

ChildID MasterID
 1      1
 2      1
 3      2

我的查询:

select CONVERT(varchar,BillDate,103) as BillDate,SUM(cash)as ByCash 
from childdetails CD 
inner join MasterDetails MD on MD.ID=CD.MasterID
where CONVERT(varchar,BillDate,103)='22/02/2014' 
group by BillDate

我的输出不正确:

BillDate        ByCash
22/02/2014      400

正确的输出应该是 300 ByCash ,但我不确定为什么它被计算为 400。

问题似乎是您的子表对主 ID 进行了两次计数。尝试选择子表作为具有row_number的 CTE,按主 ID 分区以筛选出重复项:

select
    CONVERT(varchar,BillDate,103) as BillDate,
    SUM(cash)as ByCash
from    (
        select *,
            row_number() over(partition by MasterID order by ChildID) dedupe
        from childdetails
        ) CD inner join MasterDetails MD on MD.ID=CD.MasterID
where
    CONVERT(varchar,BillDate,103)='22/02/2014'
    and CD.dedupe = 1
group by BillDate

也许这就是你要找的:

SELECT BillDate, SUM(Cash) FROM MasterDetails GROUP BY BillDate

如果不是,请准确说明您的预期输出是什么。

最新更新