我已在下面附上我的代码供您审核。我的错误来自第4个CASE语句,我使用数学函数来计算信息。有谁知道导致错误的原因以及如何绕过它?我猜这个问题最后是我的ORDER BY函数。
SELECT
H.DATE AS "DATE"
,TRIM(H.NUMBER) AS "NUMBER"
,CASE WHEN TT.RY_DATE IS NULL THEN '' ELSE CHAR(TT.RY_DATE) END AS "RY DATE"
,CASE WHEN T.PT_DATE = '0001-01-01' THEN 'N' ELSE 'Y' END AS "PT"
,T.ON AS "ON"
,CASE WHEN H.CLASS = '0.00' THEN H.CLASS ELSE H.RATED END AS "CLASS"
,SUBSTR(TRIM(S.NAME), 1, LENGTH(TRIM(S.NAME))-2) AS "CITY"
,H.STATE AS "STATE"
,H.ZIPCODE AS "ZIP"
,SUBSTR(TRIM(CN.NAME), 1, LENGTH(TRIM(CN.NAME))-2) AS "DCITY"
,H.STATE AS "DSTATE"
,H.ZIPCODE AS "DZIP"
,H.WGT AS "WEIGHT"
,CASE
WHEN Q.AMOUNT IS NULL THEN (Y.CHGS - Z.AMOUNT)
WHEN Q.AMOUNT IS NOT NULL THEN (Y.CHGS - (SUM(Q.AMOUNT + Z.AMOUNT))) ELSE ''
END AS "LL"
,Z.AMOUNT AS "FU"
,SUM(Q.AMOUNT) AS "AC"
,Y.CHGS AS "CHARGES"
FROM A.COST H
INNER JOIN A.MASTER S
ON H.CITY = S.CITY
INNER JOIN A.MASTER CN
ON H.CITY = CN.CITY
INNER JOIN A.SPEC Z
ON Z.NUMBER = H.NUMBER
AND Z.DATE = H.DATE
AND Z.TYPE = 'F'
INNER JOIN A.ALT Y
ON Y.NUMBER = H.NUMBER
AND Y.DATE = H.DATE
LEFT OUTER JOIN A.SPEC. Q
ON Q.NUMBER = H.NUMBER
AND Q.DATE = H.DATE
AND Q.TYPE = 'S'
LEFT OUTER JOIN A.T TT
ON H.NUMBER = TT.NUMBER
LEFT OUTER JOIN A.TIME T
ON T.NUMBER = H.NUMBER
WHERE H.CTRL = '000000'
AND (MONTH(CURRENT DATE)-1) = MONTH(H.DATE)
AND H.DATE > CURRENT DATE - 90 DAYS
GROUP BY
H.DATE
,TRIM(H.NUMBER)
,CASE WHEN TT.D_DATE IS NULL THEN '' ELSE CHAR(TT.D_DATE) END
,CASE WHEN T.PT_DATE = '0001-01-01' THEN 'N' ELSE 'Y' END
,T.ON
,CASE WHEN H.CLASS = '0.00' THEN H.CLASS ELSE H.RATED END
,SUBSTR(TRIM(S.NAME), 1, LENGTH(TRIM(S.NAME))-2)
,H.STATE
,H.ZIPCODE
,SUBSTR(TRIM(CN.NAME), 1, LENGTH(TRIM(CN.NAME))-2)
,H.STATE
,H.ZIPCODE
,H.WGT
,CASE WHEN Q.AMOUNT IS NULL THEN (Y.CHGS - Z.AMOUNT)
WHEN Q.AMOUNT IS NOT NULL THEN (Y.CHGS - (SUM(Q.AMOUNT + Z.AMOUNT))) END
,Z.AMOUNT
,Y.CHGS
ORDER BY DATE
答案 0 :(得分:1)
问题是您尝试在SELECT中引用单个和聚合的Q.AMOUNT
值。
如果我理解你的意图正确,你可能打算用你的第四个案例来做这件事:
Y.CHGS - (COALESCE(SUM(Q.AMOUNT), 0) + Z.AMOUNT) AS "LL"
如果组中的每个Q.AMOUNT
都为NULL,SUM(Q.AMOUNT)
也将为NULL并替换为零,这将使表达式基本上等同于Y.CHGS - Z.AMOUNT
。
您不需要在GROUP BY中重复此表达式,因为其中的所有引用都已经是GROUP BY条件或正在聚合。
COALESCE
函数接受多个参数并返回第一个不为NULL的参数。
答案 1 :(得分:0)
在第四种情况下,不使用额外的SUM
功能。尝试这样的事情: -
CASE
WHEN Q.AMOUNT IS NULL THEN (Y.CHGS - Z.AMOUNT)
WHEN Q.AMOUNT IS NOT NULL THEN (Y.CHGS - Q.AMOUNT + Z.AMOUNT)
ELSE ''
END AS "LL"
希望这对你有所帮助。
答案 2 :(得分:0)
从GROUP BY中删除以下内容:
CASE WHEN Q.AMOUNT IS NULL THEN (Y.CHGS - Z.AMOUNT)
WHEN Q.AMOUNT IS NOT NULL THEN (Y.CHGS - (SUM(Q.AMOUNT + Z.AMOUNT))) END