如何将n行转换为具有多列的单行

时间:2018-10-03 16:42:06

标签: sql sql-server

我正在尝试将表中的行转换为单行-旧的枢轴栗子。我正在使用sqlserver(和一个新手),并创建了一个简单的示例来说明问题。

create table myrows (id number, name varchar2(10), seq number);

insert into myrows values (1, 'ACE0316', 1);
insert into myrows values (2, 'ACE3134', 2);
insert into myrows values (3, 'ACE0356', 3);

如果我提交以下查询,则会得到零结果,因为不存在以seq为4的行,但是无论是否存在seq = 4的行,我都想要一个 d_name 列。

select a.name a_name, b.name b_name, c.name c_name, d.name d_name
from (
select name from myrows where seq = 1) a,
(select name from myrows where seq = 2) b,
(select name from myrows where seq = 3) c,
(select name from myrows where seq = 4) d

预先感谢 安德鲁

1 个答案:

答案 0 :(得分:2)

您可以尝试将条件MAXMINCASE WHEN一起使用

create table myrows (id int, name varchar(10), seq int);

insert into myrows values (1, 'ACE0316', 1);
insert into myrows values (2, 'ACE3134', 2);
insert into myrows values (3, 'ACE0356', 3);

查询1

select 
    MAX(CASE WHEN seq = 1 then name end) a_name,
    MAX(CASE WHEN seq = 2 then name end) b_name,
    MAX(CASE WHEN seq = 3 then name end) c_name
from myrows

Results

|  a_name |  b_name |  c_name |
|---------|---------|---------|
| ACE0316 | ACE3134 | ACE0356 |