我目前正在进行导入,需要根据表格行的值构建逗号分隔的字符串。我能够这样做,但想知道我是否可以优化它。
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
答案 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语句使用唯一分隔符添加必要的值。内部替换找到两个连续的分隔符并将其更改为逗号。最后一个外部替换找到一个分隔符并将其删除。