我有一个列(比如col A),它有布尔值,现在取决于Col A是0还是1,我必须将另一列(比如Col B)的值写入两个不同的列。
(例如,如果Col A为0,则列B的值必须写在C列中,D列必须为空,如果它为1,则B列的值必须写在D列中, C列必须为空白。
甚至可以包含在查询中吗? 或者我必须在文件中导入查询结果并在其上运行脚本?
答案 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