2014-01-22 36 views
-1

我有這個疑問應該給這種輸出 -SQL服務器:選擇上多表連接沒有完成

NAME DATE_JOINED TOTAL_GROUPS_FORMED LOANS_ADVANCES TOTAL_ISSUED_AMOUNT TOTAL_LOAN_AMT_REPAID TOTAL_ACCOUNT TOTAL_CLIENTS_RECRUITED TOTAL_AMT_DEPOSITS TOTAL_AMT_WITHDRAWALS NUMBER_DROPOUTS  REPORT_DATE 

這是我的查詢。

SELECT 
    D.NAME, 
    0.0 AS DATE_JOINED, 
    0 AS TOTAL_GROUPS_FORMED, 
    COUNT(LOAN_NUMBER) AS LOANS_ADVANCES, 
    SUM(ISSUED_AMOUNT) AS TOTAL_ISSUED_AMOUNT, 
    0.0 AS TOTAL_LOAN_AMT_REPAID, 
    COUNT(A.ACCOUNT_NUMBER) AS TOTAL_ACCOUNT, 
    COUNT(C.CUSTOMER_CODE) AS TOTAL_CLIENTS_RECRUITED, 
    0.0 AS TOTAL_AMT_DEPOSITS, 
    0.0 AS TOTAL_AMT_WITHDRAWALS, 
    COUNT(CH.ACCOUNT_NUMBER) AS NUMBER_DROPOUTS, 
    D.REPORT_DATE FROM SALES_OFFICER D 
LEFT JOIN LOANS L ON D.SALES_OFFICER_CODE=L.OFFICER_CODE 
LEFT JOIN OPEN_ACCOUNT A ON D.SALES_OFFICER_CODE=A.OFFICER_CODE 
LEFT JOIN CUSTOMERS C ON D.SALES_OFFICER_CODE=C.OFFICER_CODE 
LEFT JOIN CLOSED_ACCOUNT CH ON D.SALES_OFFICER_CODE=CH.OFFICER_CODE 
GROUP BY D.NAME,D.REPORT_DATE 

此查詢不完成,可能是因爲所有的表都有大量的數據。

是否有另一種方式可以獲得相同的輸出,其中一個銷售主管的信息可以從多個表中查看並彙總爲單個記錄,並按報告日期進行分組。

+0

請編輯您的文章,以便閱讀。 http://stackoverflow.com/editing-help – TTeeple

+1

當代碼被格式化時,問題會更嚴重(很多),因此人們可以閱讀它們。 –

+0

查看此查詢的預計執行計劃。它可能有助於http://technet.microsoft.com/en-us/library/ms191194.aspx – Backs

回答

3

您正在爲每個銷售人員獲得笛卡爾產品 - 貸款數量次數開放帳戶數量時間客戶數量次數已關閉帳戶數量。

您需要在進行連接之前總結每個維度。這裏是一個開始:

from sales_offices so left join 
    (select l.OFFICER_CODE, COUNT(*) AS LOANS_ADVANCES, 
      SUM(ISSUED_AMOUNT) AS TOTAL_ISSUED_AMOUNT 
    from loans l 
    group by l.OFFICER_CODE 
    ) 
    on so.SALES_OFFICER_CODE = l.OFFICER_CODE 

這只是一個猜測,因爲你不能在所有的列使用表的別名。

+1

好點,因爲幾乎沒有任何信息給出。在計劃中會發現微不足道的東西。 – usr

+0

感謝戈登,這幫助我解決了這個問題。我真的很感激 –