Axapta数据库SQL查询CASE语句语法错误排查求助
排查SQL语法错误并修正
你碰到的Msg 156错误是两处语法问题导致的,我帮你逐一拆解并修正:
错误1:列定义间缺少逗号
在d.statusissue和case关键字之间,你没有添加逗号。SQL要求不同列的表达式之间必须用逗号分隔,数据库无法识别这是两个独立的列项,因此抛出语法错误。
错误2:CASE语句格式不正确
你的CASE写法遗漏了要判断的目标字段。正确的CASE语法有两种形式:
CASE [目标字段] WHEN [匹配值] THEN [返回结果] ... ENDCASE 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
相关产品推荐
相关产品推荐

