我有两个表,Master
和Child.
我需要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
如果不是,请准确说明您的预期输出是什么。