我有一個很好的sql查詢,直到我嘗試實現group by子句。目前它正在獲取我要求的所有行,但他們需要進行其他分組,我有太多的行。但是,一旦我添加了一個組,即使它只是按一列進行分組,sql也會完全崩潰。 任何幫助將不勝感激。SQL組通過case語句崩潰
SQL當前錯誤消息爲:
執行數據庫查詢時出錯。
[Sybase] [SequeLink JDBC驅動程序] [ODBC套接字] [IBM] [iSeries Access ODBC驅動程序] [DB2 UDB] SQL0122 - SELECT列表中的列QDSHDT或表達式無效。
而就像我之前提到的沒有group by子句一樣,這個錯誤完全消失,查詢運行正常。
SELECT Distinct 'SJ' as JOURNAL,
BLNDTA.bln525l1.bclnt,
(substr(digits(dtalib.odmastl1.QDSHDT),1,2) || substr(digits(dtalib.odmastl1.QDSHDT),3,2)) as YEAR,
substr(digits(dtalib.odmastl1.QDSHDT),5,2) as shpmm,
CASE WHEN dtalib.odmastl1.qdbatch = bln525l1.bbatch THEN QDAMTBL ELSE 0.0 END as qdamtbl,
CASE WHEN dtalib.odmastl1.qdbatch = bln525l1.bbatch THEN (CASE WHEN dtalib.odmastl1.qdbatch = bln525l1.bbatch THEN dtalib.odmastl1.QDAWP + dtalib.odmastl1.QDPFEE + dtalib.odmastl1.QDSHIP3 ELSE 0.0 END) + qdadjamt ELSE 0.0 END as NETSALE,
CASE WHEN dtalib.odmastl1.qdbatch = bln525l1.bbatch THEN dtalib.odmastl1.QDCOPAY+dtalib.odmastl1.QDCPAY2 + dtalib.odmastl1.QDDEDCT ELSE 0.0 END as PATRESP,
CASE WHEN dtalib.odmastl1.qdbatch = bln525l1.bbatch THEN (CASE WHEN dtalib.odmastl1.qdbatch = bln525l1.bbatch THEN (CASE WHEN dtalib.odmastl1.qdbatch = bln525l1.bbatch THEN dtalib.odmastl1.QDAWP + dtalib.odmastl1.QDPFEE + dtalib.odmastl1.QDSHIP3 ELSE 0.0 END) + qdadjamt ELSE 0.0 END) + QDSLTAX - (CASE WHEN dtalib.odmastl1.qdbatch = bln525l1.bbatch THEN dtalib.odmastl1.QDCOPAY+dtalib.odmastl1.QDCPAY2 + dtalib.odmastl1.QDDEDCT ELSE 0.0 END) ELSE 0.0 END as prxtot,
CASE WHEN dtalib.odmastl1.qdbatch = bln525l1.bbatch THEN qdamtpd ELSE 0.0 END as qdamtpd,
(CASE WHEN dtalib.odmastl1.qdbatch = bln525l1.bbatch THEN (CASE WHEN dtalib.odmastl1.qdbatch = bln525l1.bbatch THEN dtalib.odmastl1.QDAWP + dtalib.odmastl1.QDPFEE + dtalib.odmastl1.QDSHIP3 ELSE 0.0 END) + qdadjamt ELSE 0.0 END)+qdsltax-(CASE WHEN dtalib.odmastl1.qdbatch = bln525l1.bbatch THEN dtalib.odmastl1.QDCOPAY+dtalib.odmastl1.QDCPAY2 + dtalib.odmastl1.QDDEDCT ELSE 0.0 END)-qdamtpd as CLTBALDUE,
CASE WHEN dtalib.odmastl1.qdbatch = bln525l1.bbatch THEN qdcost ELSE 0.0 END as qdcost,
CASE WHEN dtalib.odmastl1.qdbatch = bln525l1.bbatch THEN (CASE WHEN dtalib.odmastl1.qdbatch = bln525l1.bbatch THEN dtalib.odmastl1.QDAWP + dtalib.odmastl1.QDPFEE + dtalib.odmastl1.QDSHIP3 ELSE 0.0 END) + qdadjamt - qdcost ELSE 0.0 END as gp,
CASE WHEN dtalib.odmastl1.qdbatch=bln525l1.bbatch THEN 1 ELSE 0.0 END as OrderCnt,
CASE WHEN bln525l1.brjrsn <> ' ' THEN 1.0 ELSE 0.0 END as DenialCnt,
CASE WHEN bln525l1.brjrsn <> ' ' THEN 1.0 ELSE 0.0 END as Reshipcnt,
CASE WHEN dtalib.odmastl1.qdbatch = bln525l1.bbatch and (CASE WHEN dtalib.odmastl1.qdbatch = bln525l1.bbatch THEN (CASE WHEN dtalib.odmastl1.qdbatch = bln525l1.bbatch THEN (CASE WHEN dtalib.odmastl1.qdbatch = bln525l1.bbatch THEN dtalib.odmastl1.QDAWP + dtalib.odmastl1.QDPFEE + dtalib.odmastl1.QDSHIP3 ELSE 0.0 END) + qdadjamt ELSE 0.0 END) + QDSLTAX - (CASE WHEN dtalib.odmastl1.qdbatch = bln525l1.bbatch THEN dtalib.odmastl1.QDCOPAY+dtalib.odmastl1.QDCPAY2 + dtalib.odmastl1.QDDEDCT ELSE 0.0 END) ELSE 0.0 END) <> 0 THEN 1.0
WHEN dtalib.odmastl1.qdbatch = bln525l1.bbatch and (CASE WHEN dtalib.odmastl1.qdbatch = bln525l1.bbatch THEN (CASE WHEN dtalib.odmastl1.qdbatch = bln525l1.bbatch THEN (CASE WHEN dtalib.odmastl1.qdbatch = bln525l1.bbatch THEN dtalib.odmastl1.QDAWP + dtalib.odmastl1.QDPFEE + dtalib.odmastl1.QDSHIP3 ELSE 0.0 END) + qdadjamt ELSE 0.0 END) + QDSLTAX - (CASE WHEN dtalib.odmastl1.qdbatch = bln525l1.bbatch THEN dtalib.odmastl1.QDCOPAY+dtalib.odmastl1.QDCPAY2 + dtalib.odmastl1.QDDEDCT ELSE 0.0 END) ELSE 0.0 END) = 0 THEN 0.0 ELSE NULL END as Shortpd
FROM dtalib.odmastl1
LEFT JOIN DTALIB.INV105L1 on (
dtalib.odmastl1.qdndc5=DTALIB.INV105L1.indc5
and dtalib.odmastl1.qdndc4=DTALIB.INV105L1.indc4
and dtalib.odmastl1.qdndc2=DTALIB.INV105L1.indc2
and dtalib.odmastl1.qdgener=DTALIB.INV105L1.igener)
LEFT JOIN blndta.gpi205l1 on (
DTALIB.INV105L1.igpi=gpi205l1.ggpi)
LEFT JOIN blndta.bln525l1 on (
dtalib.odmastl1.qdordno=bln525l1.brxnum)
LEFT JOIN dtalib.odmast4l1 on (
dtalib.odmastl1.qdcocd=dtalib.odmast4l1.q4cocd
and dtalib.odmastl1.qdbrcd=dtalib.odmast4l1.q4brcd
and dtalib.odmastl1.qddvcd=dtalib.odmast4l1.q4dvcd
and dtalib.odmastl1.qdtrans=dtalib.odmast4l1.q4trans
and dtalib.odmastl1.qdline=dtalib.odmast4l1.q4line
and dtalib.odmastl1.qdprcgrp=dtalib.odmast4l1.q4group
and dtalib.odmastl1.qdprcclnt=dtalib.odmast4l1.q4clnt
and dtalib.odmastl1.qdfill##=dtalib.odmast4l1.Q4FILL##)
LEFT JOIN dtalib.ohmast on (
dtalib.odmastl1.qdcocd=dtalib.ohmast.qhcocd
and dtalib.odmastl1.qdbrcd=dtalib.ohmast.qhbrcd
and dtalib.odmastl1.qddvcd=dtalib.ohmast.qhdvcd
and dtalib.odmastl1.qdtrans=dtalib.ohmast.qhtrans)
LEFT JOIN blndta.cst115l1 on (
dtalib.ohmast.qhacct=cst115l1.acct
and dtalib.ohmast.qhadnum=cst115l1.adnum)
WHERE 1=1
AND dtalib.odmastl1.QDSTATS IN('R3','70')
AND SUBSTR(DTALIB.INV105L1.igpi,1,4) NOT IN('9991')
AND QDMEDCD NOT IN('CASH','EDUCA','SRVC')
AND dtalib.odmastl1.QDSHDT BETWEEN '20170101' and '20991231'
AND dtalib.odmastl1.QDRSDT=0
GROUP BY BLNDTA.bln525l1.bclnt, (substr(digits(dtalib.odmastl1.QDSHDT),1,2) || substr(digits(dtalib.odmastl1.QDSHDT),3,2)), substr(digits(dtalib.odmastl1.QDSHDT),5,2)
SQL不會「崩潰」。它可能會返回一個錯誤,如果你希望人們能夠幫助你,應該可能會報告你所看到的錯誤(錯誤代碼和確切的錯誤信息,理想情況下) –
'(substr(digits(dtalib.odmastl1.QDSHDT), 1,2)|| substr(數字(dtalib.odmastl1.QDSHDT),3,2))'你是放棄還是分組條件? –
@SagarGangwal - 這是一個串聯運算符。 SQL不是C.(或者C++,或者C#,或者Java或者JavaScript,或者...)\ –