2013-05-15 51 views
1

背景多個子查詢時,合併的申報結果太多

我已經合併的金融交易(每個兩家公司)的兩個長名單到一個表(實際上是這裏的原因並不重要,一個DataView)。這兩家公司與很多客戶做生意。 我想要的是一個查詢,它返回每個公司與每個客戶進行的金融交易總數。

例如:

Customer  Company A Company B 

Customer X   10   0 
Customer Y   15   26 
Customer Z   0   71 

因此,每個客戶已經處理了至少有一家公司,可能兩家公司。

到目前爲止我的查詢已經到目前爲止。 。 。

SELECT v.[Company], 
    v. [AnalysisName], 
    s1.CMTtrans, 
    s2.CFLtrans 
FROM vMainCustTrans AS v 
LEFT JOIN (SELECT [AnalysisName], COUNT([AnalysisName]) AS CMTtrans 
     FROM vMainCustTrans 
     WHERE [Company] = 'Money' 
     GROUP BY [AnalysisName]) AS s1 
     ON v.[AnalysisName] = s1.[AnalysisName] 
LEFT JOIN (SELECT [AnalysisName], COUNT([AnalysisName]) AS CFLtrans 
     FROM vMainCustTrans 
     WHERE [Company] = 'Forex' 
     GROUP BY [AnalysisName]) AS s2 
     ON v.[AnalysisName] = s2.[AnalysisName] 
ORDER BY v.[Company], v.[AnalysisName] 

現在子查詢(S1)返回89個客戶 子查詢(S2)返回37個客戶 然而,整個查詢返回18989線 應該有89和126(即,89 + 37)行,這取決於之間A公司和B公司之間有多少重疊部分

有人可以指出我的查詢出了什麼問題,以及我如何產生我想要的結果;即客戶名單,其中兩個客戶的交易數量爲兩個。

+0

你能提供兩個表的DD?我的意思是查詢所需的兩個表中的列? – Dhwani

+0

您顯示的輸出會交叉結果,但查詢不會。這幾乎聽起來像你試圖讓客戶和公司加入笛卡爾。在這種情況下,這是NumberofCustomers * 2。你的左連接不會完成。 –

回答

2

如果我找到了正確的(客戶= AnalysisName)應該看起來像:

SELECT 
    v. [AnalysisName], 
    SUM(CASE WHEN [Company] = 'Money' THEN 1 ELSE 0 END) CMTtrans, 
    SUM(CASE WHEN [Company] = 'Forex' THEN 1 ELSE 0 END) CFLtrans 
FROM vMainCustTrans AS v 
GROUP BY v.[AnalysisName] 
ORDER BY v.[AnalysisName] 
+0

關閉,但這會爲每個客戶生成兩行,而不是一行。在問題中看到我的表格示例(客戶Y)與A公司和B公司都有合作關係,但不是每個公司的生產線,我只想要一條生產線總數:) – PJW

+0

我修復了查詢 – valex

+0

非常感謝 – PJW