【发布时间】:2021-07-23 20:02:31
【问题描述】:
我有以下查询和子查询,其中我得到一个SUM 值,并且我想有条件地加入PS_VOUCHER_LINE LineSub PS_VOUCHER Line 上的PS_VOUCHER Line 仅当VOUCHER_ID 有超过 1 个LINE_NBR,否则我不希望执行最后一个连接条件。我在语句中遇到语法错误('=' 附近的语法不正确。)。我怎样才能让这个条件连接正常工作?
SELECT
CONCAT(Header.BUSINESS_UNIT, Header.VOUCHER_ID) AS INVOICE_ID
,
(
SELECT SUM(LineSub.MERCHANDISE_AMT)
FROM PS_VOUCHER_LINE LineSub
WHERE Line.BUSINESS_UNIT = LineSub.BUSINESS_UNIT
AND Line.VOUCHER_ID = LineSub.VOUCHER_ID
AND
CASE
WHEN COUNT(Line.LINE_NBR) > 1 THEN Line.LINE_NBR = LineSub.LINE_NBR
END
GROUP BY LineSub.VOUCHER_ID
) + Header.FREIGHT_AMT + Header.SALETX_AMT AS GROSS_AMT_LINE_FREIGHT_TAX
FROM
PS_VOUCHER Header
INNER JOIN PS_VOUCHER_LINE Line ON Line.BUSINESS_UNIT = Header.BUSINESS_UNIT
AND Line.VOUCHER_ID = Header.VOUCHER_ID
WHERE
Header.VOUCHER_ID = '00241107'
【问题讨论】:
-
提供样本数据、期望的结果,以及你想要做什么的解释。这个查询有很多错误,不值得尝试一次修复一个错误。
-
由于语法错误,我无法提供示例数据。
-
。 .样本数据来自表格(或者是编造的),与语法错误无关。
-
CASE 需要 ELSE 条件
-
我为
CASE语句尝试了以下更改,但我收到一个错误消息:“聚合可能不会出现在 WHERE 子句中,除非它位于包含在 HAVING 子句或选择列表中的子查询中,并且正在聚合的列是外部引用。"可以修改以下内容以使其正常工作吗?AND LineSub.LINE_NBR = CASE WHEN COUNT(LineSub.LINE_NBR) > 1 THEN Line.LINE_NBR ELSE LineSub.LINE_NBR END
标签: sql sql-server-2014