根据条件在SQL Server中移动列

时间:2016-09-16 14:39:27

标签: sql-server sql-server-2008

我有一个列(比如col A),它有布尔值,现在取决于Col A是0还是1,我必须将另一列(比如Col B)的值写入两个不同的列。

(例如,如果Col A为0,则列B的值必须写在C列中,D列必须为空,如果它为1,则B列的值必须写在D列中, C列必须为空白。

甚至可以包含在查询中吗? 或者我必须在文件中导入查询结果并在其上运行脚本?

4 个答案:

答案 0 :(得分:1)

这似乎是一个简单的CASE表达式:

SELECT  ColA,
        ColB,
        CASE WHEN ColA = 0 THEN ColB END ColC,
        CASE WHEN ColA = 1 THEN ColB END ColD
FROM dbo.YourTable;

答案 1 :(得分:1)

使用案例陈述进行更新:

UPDATE yourtable SET
  col_c = CASE 
          WHEN col_a = 0 THEN col_b 
          WHEN col_a = 1 THEN null
          ELSE col_c END,
  col_d = CASE 
          WHEN col_a = 0 THEN null 
          WHEN col_a = 1 THEN col_b
          ELSE col_d END

如果col_a是布尔值并且它可能包含空值,则保持列值不变。

答案 2 :(得分:0)

使用个案陈述:

SELECT
    ColA,
    ColB,
    CASE ColA 
        WHEN 0 THEN ColB
        ELSE '' 
    END AS Colc,
    CASE ColA 
        WHEN 0 THEN ''
        ELSE ColB 
    END AS ColD
From TableName

答案 3 :(得分:0)

包含所有可能值的CASE语句。

declare @tab table
(
colA bit,
colB char(2)
)

insert into @tab values (0, 'xx');
insert into @tab values (1, 'yy');
insert into @tab values (null, 'zz');
insert into @tab values (0, null);
insert into @tab values (null, null);

Select colA, colB,
case when colA = 0 then colB end colC,
case when colA = 1 then colB end colD
from @tab

输出:

0      xx   xx      NULL
1      yy   NULL    yy
NULL   zz   NULL    NULL
0      NULL NULL    NULL
NULL   NULL NULL    NULL