我正在尝试更改从SQL发出的数据的值。在SAL_ClientTypeID中通常值为4的位置,我想说“私有”。我目前遇到的错误是
“消息156,级别15,状态1,第3行关键字附近的语法不正确 “是”。
最初我尝试了以下方法
CASE
WHEN SAL_ClientTypeID = 4 THEN 'Private'
ELSE SAL_ClientTypeID
END,
但是我遇到了这个错误
“将varchar值'Private'转换为数据时,转换失败 输入int。”
SELECT SAL_Account_Ref AS 'Account Ref',
CASE
WHEN SAL_ClientTypeID = 4 THEN cast (sal_clienttypeID as nvarchar(20)) as 'Private'
ELSE SAL_ClientTypeID
END
FROM sales;
我希望SAL_ClientTypeID = 4的输出值为“私有”
答案 0 :(得分:3)
SELECT SAL_Account_Ref AS 'Account Ref',
CASE
WHEN SAL_ClientTypeID = 4 THEN 'Private'
ELSE cast (sal_clienttypeID as nvarchar(20))
END
FROM sales;
答案 1 :(得分:1)
您不能在情况下混合数据类型...尝试
SELECT SAL_Account_Ref AS 'Account Ref',
CASE
WHEN SAL_ClientTypeID = 4 THEN 'Private'
ELSE CAST(SAL_ClientTypeID, as nvarchar(20))
END
FROM sales;
答案 2 :(得分:1)
查询有两个问题:
信息156,级别15,状态1,第3行,关键字“ as”附近的语法错误。
来自as
后跟字符串文字的情况,应在其后加上列名:
SELECT SAL_Account_Ref AS Account_Ref
第二个错误是因为您在case上返回两个数据类型-如果字符串等于4,则返回字符串int,否则,您应该使用强制转换以确保其始终相同:
SELECT SAL_Account_Ref AS Account_Ref,
CASE
WHEN SAL_ClientTypeID = 4 THEN 'Private'
ELSE cast (sal_clienttypeID as nvarchar(20))
END
FROM sales;
答案 3 :(得分:0)
tsql中有一个数据类型优先级。数字类型的优先级高于文本类型。因此,当您的case
同时包含“ Private”之类的文本和SAL_ClientTypeID之类的数字类型时,该数字将被覆盖。当出现“私人”情况时,tsql尝试将其转换为数字并引发您看到的错误。
如果可以将SAL_ClientTypeID用作文本,请使用其他答案之一。否则,您将不得不重新考虑自己的规范。