Sql server TSQL-从一个列中创建两个列的案例
对于这个简化的表结构,我需要去掉为相同ID输出的第二行。对于单个ID,行值可能只有1Sql 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'
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是否可以?