0

我有兩個表,MasterChild.我需要表中列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 

正確的輸出應爲ByCash 300,但我不知道爲什麼它被計算爲400

+0

100 + 100 + 200 = 400。你如何得到300?您排除了哪些子記錄? – jpw

+0

不要將日期轉換爲字符串。將字符串轉換爲日期。 – usr

+0

我已經明確提及我需要Master表中的'Cash'列的總和純粹取決於主表..... – Pradeep

回答

0

的問題似乎是,你的孩子表計數MasterID兩次。請嘗試選擇子表的CTE與ROW_NUMBER,通過MasterID分區過濾掉重複:

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 
+0

是的,我知道子表中的masterid重複了兩次,所以只有我沒有得到確切的輸出,但你的查詢是正確的..你可以解釋分配CD.dedupe = 1的目的在哪裏條件.....讓我知道 – Pradeep

+0

CD.dedupe = 1返回一系列匹配MasterID中的第一個。可能有MasterID沒有重複的情況。 CD.dedupe = 1也會返回。 –

+0

如果我已經回答了您的問題,請考慮將我的答案標記爲答案並對其進行投票。謝謝:) –

0

也許這是你在找什麼:

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

如果不是,請澄清你的預期產出是什麼。

+0

我需要匹配子表強制爲了獲得其他某些條件,所以根據您的查詢我可以得到輸出,但我需要匹配子表得到確切的輸出.... – Pradeep

+0

@Pradeep我現在覺得愚蠢,但我沒有完全得到你想要的輸出結果。如果你可以添加你想要的輸出的例子,我相信這可以解決。 – jpw

+0

實際的問題是在子表中重複的masterid,我已經使用加入組,所以我現金爲400 .... – Pradeep