CASE WHEN Col1 = 1 THEN
(CASE WHEN Col2=2 THEN 'a' + ', ' END) +
(CASE WHEN Col3=2 THEN 'b' + ', ' END) +
(CASE WHEN Col4=2 THEN 'c' END)
END as Names
名称可以是a,b,c或a,b或b,
如何在结尾处删除字符“,”?我无法使用替换或填充等功能,因为“名称”是别名
原始查询:
那么ht.bTax = 0时的情况
ISNULL(在(r1.iOccType = 2)THEN p1.SFIRSTNAME +''+ p1.ULASTNAME END的情况下,'')+ ISNULL(在(r2.iOcctType = 2)THEN p2.SFIRSTNAME +''+ p2.ULASTNAME +','END,''的情况下)+ ISNULL(在(r3.iOccType = 2)THEN p3.SFIRSTNAME +''+ p3.ULASTNAME +','END,''的情况下)+ ISNULL(在(r4.iOccType = 2)THEN p4.SFIRSTNAME +''+ p4.ULASTNAME +','END,''的情况下)+ ISNULL(在(r5.iOccType = 2)THEN p5.SFIRSTNAME +''+ p5.ULASTNAME +','END,''的情况下) 结束AS名称
答案 0 :(得分:0)
我的解决方案是将逗号与其他字符完全相同地添加到“ c”结果的末尾,然后在该事实之后从字符串中删除最后两个字符。我认为将您的第一个语句放入cte中,然后在清理字符串的同时从中进行选择会更清洁,
with cte as(
Select
CASE WHEN 1 = 1 THEN
(CASE WHEN Col2=2 THEN 'a, ' ELSE '' END) +
(CASE WHEN Col3=2 THEN 'b, ' ELSE '' END) +
(CASE WHEN Col3=2 THEN 'c, ' ELSE '' END)
END as Names
)
select SUBSTRING(Names, 0, Len(Names)) as Names from CTE
或者,您也可以内联,但是您必须以这种方式第二次重复字符串构造。
CASE WHEN Col1 = 1 THEN
SUBSTRING(
(CASE WHEN Col2=2 THEN 'a, ' ELSE '' END) +
(CASE WHEN Col3=2 THEN 'b, ' ELSE '' END) +
(CASE WHEN Col4=2 THEN 'c, ' ELSE '' END)
,0, LEN(
(CASE WHEN Col2=2 THEN 'a, ' ELSE '' END) +
(CASE WHEN Col3=2 THEN 'b, ' ELSE '' END) +
(CASE WHEN Col4=2 THEN 'c, ' ELSE '' END)
))
END as Names
只是解释一下我在做什么:
SUBSTRING (字符串,起点,终点)-从起点(0开始)到终点返回字符串的内容
LEN (字符串)-返回字符串中的字符数
通过将0作为起始位置并将字符串的LEN()作为最后一个参数,它将返回缺少最后一个字符的完整字符串(因为索引从零开始)。通常,您必须放置LEN()-1,但显然LEN不会计算最后一个空字符。