我有一个包含5列的表格。 我想基于第1列到第4列中的值更新第5列(默认为NULL)。如果第1列为空,则将“c1”添加到第5列如果第2列为空,则将“c2”添加到第5列,依此类推。 另外,如果第1列和第2列为空,我想将“C1,C2”添加到第5列,依此类推。 我怎样才能做到这一点。
这是我到目前为止所尝试的内容:
UPDATE TABLE
SET C5 =
Case
when C1 IS NULL then 'C!'
WHEN C2 IS NULL then 'C2'
WHEN C3 IS NULL THEN 'C3'
WHEN C4 IS NULL ThEN 'C4'
END
答案 0 :(得分:2)
我会用这个:
UPDATE table
SET C5 = ISNULL(REPLACE(C1,C1,''),',C1')
+ISNULL(REPLACE(C2,C2,''),',C2')
+ISNULL(REPLACE(C3,C3,''),',C3')
+ISNULL(REPLACE(C4,C4,''),',C4')
等
我们的想法是,您使用REPLACE
为您留下空白的''或NULL
,然后使用ISNULL
添加NULL
字段名称。
您可以很快地在Excel中制作查询,它会在字符串末尾留下一个错误的逗号,如果这是一个问题,可以轻松处理:
UPDATE table
SET C5 = STUFF(ISNULL(REPLACE(C1,C1,''),',C1 ')
+ISNULL(REPLACE(C2,C2,''),',C2 ')
+ISNULL(REPLACE(C3,C3,''),',C3 ')
+ISNULL(REPLACE(C4,C4,''),',C4 '),1,2,'')
更新:更改为使用STUFF()函数而不是LEFT()来消除错误的逗号,并在列出的项目之间添加了空格。
答案 1 :(得分:1)
UPDATE tbl
SET fifth = CASE
WHEN first IS NULL AND second IS NULL and third IS NULL and fourth IS NULL THEN "C1, C2, C3, C4"
WHEN .... -- all 15 cases
答案 2 :(得分:1)
我没有测试过,但是这样的事情应该有效:
update table1 set c5 =
(case when c1 is null then 'C1,' else '' end ||
case when c2 is null then 'C2,' else '' end ||
case when c3 is null then 'C3,' else '' end ||
case when c4 is null then 'C4' else '' end)
如果需要的话,我可以通过t-sql字符串操作更好地修剪尾随逗号。
答案 3 :(得分:1)
UPDATE t SET C5 =
REPLACE(REPLACE(
CASE C1 WHEN NULL THEN 'C1' ELSE '' END+'<>'+
CASE C2 WHEN NULL THEN 'C2' ELSE '' END+'<>'+
CASE C3 WHEN NULL THEN 'C3' ELSE '' END+'<>'+
CASE C4 WHEN NULL THEN 'C4' ELSE '' END,
'><',''),'<>',',')