2015-02-09 75 views
0

我想做一個看似基本的select語句,但無法獲得where子句的正確語法。select語句計算列的總數和組的問題

select 
    T1.CUSTNMBR [Customer Number], 
    T1.APFRDCTY [Doc Type], 
    sum(T1.APPTOAMT) as [Apply to Amount], 
    T1.APFRDCNM [Apply From Doc No], 
    T2.ORTRXAMT [Doc Amount], 
    T2.CURTRXAM [Unapplied Amount] 
from 
(
    select 
     CUSTNMBR, 
     APFRDCNM, 
     APFRDCTY, 
     APPTOAMT 
    from GPSTJ..RM30201 
    union 
    select 
     CUSTNMBR as CUSTNMBR, 
     APFRDCNM as APFRDCNM, 
     APFRDCTY as APFRDCTY, 
     APPTOAMT as APPTOAMT  
    from GPSTJ..RM20201 
) T1 
LEFT JOIN 
(
    select 
     CUSTNMBR, 
     DOCNUMBR, 
     DOCDATE, 
     RMDTYPAL, 
     ORTRXAMT, 
     CURTRXAM  
    from GPSTJ..RM20101 
    union 
    select 
     CUSTNMBR as CUSTNMBR, 
     DOCNUMBR as DOCNUMBR, 
     DOCDATE as DOCDATE, 
     RMDTYPAL as RMDTYPAL, 
     ORTRXAMT as ORTRXAMT, 
     CURTRXAM as CURTRXAM 
    from GPSTJ..RM30101 
) T2 on T1.CUSTNMBR = T2.CUSTNMBR and T1.APFRDCNM = T2.DOCNUMBR 

where (sum(T1.APPTOAMT) - T2.ORTRXAMT) <> T2.CURTRXAM 

group by 
T1.CUSTNMBR, T1.APFRDCTY, T1.APFRDCNM, T2.ORTRXAMT, T2.CURTRXAM 

該查詢運行正常,但沒有where子句但是有太多的結果。我基本上試圖從sum,sum(T1.APPTOAMT)中減去分組字段(T2.ORTRXAMT),但我無法獲得正確的語法,但它不起作用,並且錯誤消息中沒有線索。

+0

行,所以我也是這個到Excel與沒有錯誤消息的數據連接,但我跑了通過SSMS過濾,並給予這個時候 - 聚合可能不會出現在WHERE子句中,除非它位於包含在HAVING子句或選擇列表中的子查詢中,並且要聚合的列是外部引用。 我正在閱讀解決這個問題的解決方案,但是在此期間的任何幫助都會很好。 Thankyou – 2015-02-09 07:56:11

+0

使用'HAVING'而不是'WHERE' – 2015-02-09 07:58:19

回答

0

使用HAVING,而不是WHERE條款上聚集或團體

SELECT 
    T1.CUSTNMBR AS [Customer Number], 
    T1.APFRDCTY AS [Doc Type], 
    SUM(T1.APPTOAMT) AS [Apply to Amount], 
    T1.APFRDCNM AS [Apply From Doc No], 
    T2.ORTRXAMT AS [Doc Amount], 
    T2.CURTRXAM AS [Unapplied Amount] 
FROM(
    SELECT 
     CUSTNMBR, APFRDCNM, APFRDCTY, APPTOAMT 
    FROM GPSTJ..RM30201 
    UNION 
    SELECT 
     CUSTNMBR AS CUSTNMBR, 
     APFRDCNM AS APFRDCNM, 
     APFRDCTY AS APFRDCTY, 
     APPTOAMT AS APPTOAMT  
    FROM GPSTJ..RM20201 
)T1 
LEFT JOIN (
    SELECT 
     CUSTNMBR, DOCNUMBR, DOCDATE, RMDTYPAL, ORTRXAMT, CURTRXAM 
    FROM GPSTJ..RM20101 
    UNION 
    SELECT 
     CUSTNMBR AS CUSTNMBR, 
     DOCNUMBR AS DOCNUMBR, 
     DOCDATE AS DOCDATE, 
     RMDTYPAL AS RMDTYPAL, 
     ORTRXAMT AS ORTRXAMT, 
     CURTRXAM AS CURTRXAM 
    FROM GPSTJ..RM30101 
) T2 
    ON T1.CUSTNMBR = T2.CUSTNMBR 
    AND T1.APFRDCNM = T2.DOCNUMBR 
GROUP BY 
    T1.CUSTNMBR, T1.APFRDCTY, T1.APFRDCNM, T2.ORTRXAMT, T2.CURTRXAM 
HAVING 
    (SUM(T1.APPTOAMT) - T2.ORTRXAMT) <> T2.CURTRXAM