1

我有一个有 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
4

4 回答 4

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添加字段名称 if 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() 来消除错误的逗号,并在列出的项目之间添加了一个空格。

于 2013-07-01T22:42:53.820 回答
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
于 2013-07-01T22:08:55.333 回答
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 字符串操作的人。

于 2013-07-01T22:21:07.510 回答
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,
'><',''),'<>',',')
于 2013-07-01T22:42:41.350 回答