Sql server TSQL-从一个列中创建两个列的案例

Sql server TSQL-从一个列中创建两个列的案例,sql-server,tsql,case,Sql Server,Tsql,Case,对于这个简化的表结构,我需要去掉为相同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'

对于这个简化的表结构,我需要去掉为相同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;

只需将聚合添加到查询中:

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;

我想添加这样的注释,因为MAX函数忽略空值,因此有效地将它们从每列中过滤出来,这是OP想要实现的。这看起来不错,但我的问题是,这如何与select stmt中的更多列一起工作?是否需要按stmt将所有列放入组中?@TonyClifton这些额外列的值是否每个组都相同,即每个id都相同?是的,除了值_1和值_2之外,所有其他值都保持不变,以便进行更多类型的工作:-但最后是正确的输出。非常感谢。我想添加这样的注释,因为MAX函数忽略空值,因此有效地将它们从每列中过滤出来,这是OP想要实现的。这看起来不错,但我的问题是,这如何与select stmt中的更多列一起工作?是否需要按stmt将所有列放入组中?@TonyClifton这些额外列的值是否每个组都相同,即每个id都相同?是的,除了值_1和值_2之外,所有其他值都保持不变,以便进行更多类型的工作:-但最后是正确的输出。非常感谢。对于相同的id和字段,行数是否总是为1或2?对于id=1和字段=55,行数是否可以为3,值是否可以为4XYZ?对于相同的id和字段,行数是否始终为1或2?对于id=1和字段=55,行=3和值=4XYZ是否可以?