涉及别名时,如何删除结尾的逗号?

时间:2019-02-01 18:25:17

标签: sql case

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名称

1 个答案:

答案 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不会计算最后一个空字符。