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

Axapta数据库SQL查询CASE语句语法错误排查求助

排查SQL语法错误并修正

你碰到的Msg 156错误是两处语法问题导致的,我帮你逐一拆解并修正:

错误1:列定义间缺少逗号

在d.statusissue和case关键字之间,你没有添加逗号。SQL要求不同列的表达式之间必须用逗号分隔,数据库无法识别这是两个独立的列项,因此抛出语法错误。

错误2:CASE语句格式不正确

你的CASE写法遗漏了要判断的目标字段。正确的CASE语法有两种形式:

  • CASE [目标字段] WHEN [匹配值] THEN [返回结果] ... END
  • CASE WHEN [条件表达式] THEN [返回结果] ... END

你直接写case when '0',数据库无法明确要判断哪个字段的值是否等于'0',这是核心语法问题。

修正后的完整SQL语句

select 
    d.itemid as 'Kaubakood ja nimetus', 
    k.referenceid as 'Number', 
    d.qty as 'Kogus', 
    -- 若需要保留原状态码列,保留此行并补上逗号;不需要则可删除
    d.statusissue, 
    case 
        when d.statusissue = '0' then 'None' 
        when d.statusissue = '1' then 'Müüdud' 
        when d.statusissue = '2' then 'Maha arvatud' 
        when d.statusissue = '3' then 'Komplekteeritud' 
        when d.statusissue = '4' then 'Füüsiliselt reserveeritud' 
        when d.statusissue = '5' then 'Reserveeritud tellitud' 
        when d.statusissue = '6' then 'Tellimusel' 
        when d.statusissue = '7' then 'Pakkumiste väljaminek' 
        else d.statusissue 
    end as 'Taseme kirjeldus', -- 给转换后的列起别名,避免和原列重名
    d.shippingdateconfirmed as 'Tarne Kuupäev', 
    d.invettransorigin as 'Partii number' 
from 
    INVENTTRANS d WITH (INDEX(I_17117RECID),NOLOCK), 
    INVENTTRANSORIGIN k WITH (index(I_2911138RECID),NOLOCK) 
where 
    d.DATAAREAID='EWH1' 
    and d.PARTITION=56371445761 
    and d.recid = k.recid 
    and d.itemid = '7547511'

额外提示

我给转换后的CASE结果列设置了Taseme kirjeldus这个别名,避免和原d.statusissue列重名。如果你不需要保留原状态码列,直接删除d.statusissue,这一行即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:50:47