【问题标题】:Syntax error on CASE Statement join in subquery子查询中 CASE 语句连接的语法错误
【发布时间】: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


【解决方案1】:

只需删除大小写并添加具有 where 条件的添加:

GROUP BY LineSub.VOUCHER_ID HAVING COUNT(Line.LINE_NBR) > 1 

【讨论】:

  • 呃,在这种情况下,ELSE 需要能够停止此连接条件。我只想加入LINE_NBR 如果 LINE_NBR 的计数为VOUCHER_ID 大于一。否则,我不希望包含此连接条件。第二条建议也行不通,因为我的 VOUCHER_ID 的计数仅为 1 LINE_NBR,此外还有计数超过 1 LINE_NBR 的VOUCHER_ID。
  • 所以如果它为空,它将不会在父条件下使用......我认为你不需要一个案例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多