You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure SQL中Case表达式无法识别自定义计算列的问题解决

解决SQL中自定义计算列无法在CASE表达式中引用的问题

这是因为SQL的执行顺序限制:SELECT子句里定义的列别名,在同个SELECT的其他表达式中还未完成解析,所以直接引用会报错。下面给三种可行的解决方法:

方法1:重复计算逻辑(简单直接,适合短逻辑)

把SKU和Materialnumber的计算逻辑直接写到CASE语句里,虽然有点冗余,但能快速解决问题:

SELECT
     (Dokument +'.'+ Vs) as JBR_with_version,
     Beschreibung as Description_JBR,
     ObjKey,
     SUBSTRING(ObjKey,7,5)+'-'+SUBSTRING(ObjKey,12,5)+'-'+SUBSTRING(ObjKey,17,2) AS SKU,
     CASE
         WHEN SUBSTRING(Beschreibung,1,5)+'-'+SUBSTRING(Beschreibung,7,5)+'-'+SUBSTRING(Beschreibung,13,2) != SUBSTRING(ObjKey,7,5)+'-'+SUBSTRING(ObjKey,12,5)+'-'+SUBSTRING(ObjKey,17,2) 
              AND SUBSTRING(Beschreibung,1,5)+'-'+SUBSTRING(Beschreibung,7,5)+'-'+SUBSTRING(Beschreibung,13,2) like '[0-9][0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9]-[0-9][0-9]' 
         THEN SUBSTRING(Beschreibung,1,5)+'-'+SUBSTRING(Beschreibung,7,5)+'-'+SUBSTRING(Beschreibung,13,2)
         ELSE 'n.a.'
     END AS Materialnumber
FROM
    dbo.SAP_JBR_SKU_Report
WHERE
     ObjKey like '[0-9]%' 

方法2:使用子查询(结构更清晰,避免重复代码)

先在子查询里计算出SKU和Materialnumber,外层查询就可以直接引用这些别名了:

SELECT
    JBR_with_version,
    Description_JBR,
    ObjKey,
    SKU,
    CASE
        WHEN Materialnumber != SKU AND Materialnumber like '[0-9][0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9]-[0-9][0-9]' 
        THEN Materialnumber
        ELSE 'n.a.'
    END AS Materialnumber
FROM (
    SELECT
        (Dokument +'.'+ Vs) as JBR_with_version,
        Beschreibung as Description_JBR,
        ObjKey,
        SUBSTRING(ObjKey,7,5)+'-'+SUBSTRING(ObjKey,12,5)+'-'+SUBSTRING(ObjKey,17,2) AS SKU,
        SUBSTRING(Beschreibung,1,5)+'-'+SUBSTRING(Beschreibung,7,5)+'-'+SUBSTRING(Beschreibung,13,2) AS Materialnumber
    FROM dbo.SAP_JBR_SKU_Report
    WHERE ObjKey like '[0-9]%'
) AS SubQuery

方法3:使用CTE(公共表表达式,可读性最优)

用CTE预先定义计算列,后续查询可以直接引用,逻辑更直观:

WITH JBRData AS (
    SELECT
        (Dokument +'.'+ Vs) as JBR_with_version,
        Beschreibung as Description_JBR,
        ObjKey,
        SUBSTRING(ObjKey,7,5)+'-'+SUBSTRING(ObjKey,12,5)+'-'+SUBSTRING(ObjKey,17,2) AS SKU,
        SUBSTRING(Beschreibung,1,5)+'-'+SUBSTRING(Beschreibung,7,5)+'-'+SUBSTRING(Beschreibung,13,2) AS Materialnumber
    FROM dbo.SAP_JBR_SKU_Report
    WHERE ObjKey like '[0-9]%'
)
SELECT
    JBR_with_version,
    Description_JBR,
    ObjKey,
    SKU,
    CASE
        WHEN Materialnumber != SKU AND Materialnumber like '[0-9][0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9]-[0-9][0-9]' 
        THEN Materialnumber
        ELSE 'n.a.'
    END AS Materialnumber
FROM JBRData

内容的提问来源于stack exchange,提问作者Julia Himmels

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 03:01:06