TSQL - 从一列中创建两列的 CASE
TSQL - CASE to create two columns out of one
对于这个简化的 table 结构(参见 fiddle),我需要删除为同一 ID 输出的第二行。单个 ID 的行值可能仅为“1”。
CREATE TABLE lookup
(
id int,
field varchar(20),
row varchar(20),
value varchar(50)
);
INSERT INTO lookup
(id,field, row, value)
VALUES
(1,'55', '1', '1XYZ'),
(1,'55', '2', '2XYZ'),
(2,'55', '1', '3XYZ');
CREATE TABLE output
(
id int,
value_1 varchar(50),
value_2 varchar(50)
);
INSERT INTO output
(id, value_1, value_2)
VALUES
(1, '1XYZ', '2XYZ'),
(2, '3XYZ', null);
-- wrong
select id
,case when (field = 55 and row = 1) then value END AS value_1
,case when (field = 55 and row = 2) then value END AS value_2
from lookup;
希望你能告诉我怎么做。
谢谢。
只需将聚合添加到您的查询:
select id
,max(case when (field = 55 and row = 1) then value END) AS value_1
,max(case when (field = 55 and row = 2) then value END) AS value_2
from lookup
group by id;
对于这个简化的 table 结构(参见 fiddle),我需要删除为同一 ID 输出的第二行。单个 ID 的行值可能仅为“1”。
CREATE TABLE lookup
(
id int,
field varchar(20),
row varchar(20),
value varchar(50)
);
INSERT INTO lookup
(id,field, row, value)
VALUES
(1,'55', '1', '1XYZ'),
(1,'55', '2', '2XYZ'),
(2,'55', '1', '3XYZ');
CREATE TABLE output
(
id int,
value_1 varchar(50),
value_2 varchar(50)
);
INSERT INTO output
(id, value_1, value_2)
VALUES
(1, '1XYZ', '2XYZ'),
(2, '3XYZ', null);
-- wrong
select id
,case when (field = 55 and row = 1) then value END AS value_1
,case when (field = 55 and row = 2) then value END AS value_2
from lookup;
希望你能告诉我怎么做。
谢谢。
只需将聚合添加到您的查询:
select id
,max(case when (field = 55 and row = 1) then value END) AS value_1
,max(case when (field = 55 and row = 2) then value END) AS value_2
from lookup
group by id;