根据表中的值形成文本

时间:2015-12-17 14:29:22

标签: sql-server-2008 tsql

我目前正在进行导入,需要根据表格行的值构建逗号分隔的字符串。我能够这样做,但想知道我是否可以优化它。

      If((Select planValue from #tempTable) = 'Yes')
      Begin
       SET @ltValue='1'
      END

      If((Select planValue1 from #tempTable) = 'Yes')
      Begin
          IF(LEN(@ltValue) > 0)
           BEGIN
               SET @ltValue=@ltValue+',2'
           END
           ELSE
           BEGIN
               SET @ltValue='2'
           END         
      END

      If((Select planValue2 from #tempTable) = 'Yes')
      Begin
          IF(LEN(@ltValue) > 0)
           BEGIN
               SET @ltValue=@ltValue+',3'
           END
           ELSE
           BEGIN
               SET @ltValue='3'
           END         
      END

1 个答案:

答案 0 :(得分:0)

您提供的解决方案存在的问题是临时表中是否有多行。这是一个在select中创建字符串的选项。

DECLARE @tmpTable TABLE (
    planValue varchar(5),
    planValue1 varchar(5),
    planValue2 varchar(5)
    )

insert @tmpTable (planValue, planValue1, PlanValue2) VALUES ('Yes', 'Yes', 'No')
insert @tmpTable (planValue, planValue1, PlanValue2) VALUES ('Yes', 'No', 'No')
INSERT @tmpTable (planValue, planValue1, PlanValue2) VALUES ('No', 'Yes', 'Yes')
INSERT @tmpTable (planValue, planValue1, PlanValue2) VALUES ('No', 'No', 'Yes')
INSERT @tmpTable (planValue, planValue1, PlanValue2) VALUES ('Yes', 'Yes', 'Yes')

select REPLACE(REPLACE(CASE WHEN planValue = 'Yes' THEN '1|' ELSE '' END +  
                CASE WHEN planValue1 = 'Yes' THEN '|2|' ELSE '' END + 
                CASE WHEN planValue2 = 'Yes' THEN '|3|' ELSE '' END, '||', ','), '|', '') [ResultData]
FROM @tmpTable

输出

ResultData
1,2
1
2,3
3
1,2,3

case语句使用唯一分隔符添加必要的值。内部替换找到两个连续的分隔符并将其更改为逗号。最后一个外部替换找到一个分隔符并将其删除。