-1

I have two tables, test1

id  name    number
1   abc     12
2   xyz     12
3   pqr     12
4   mno     3
5   hij     1

and

test2

id      displayorder        date
1       1               date example 1
1       2               date example 2
1       3               date example 3
2       1               date example 4
2       2               date example 5
2       4               date example 6
3       1               date example 7
3       2               date example 8
4       1               date example 9

wanted an output of something like this enter image description here

tried joins with groupby but when that query is run on the actual table (not test1 and test2, the real tables) is taking too long to execute, is there any quick and faster way to get the desired output?

4

1 回答 1

1

模式和插入语句:

 create table test1(id int,name varchar(50),  number int);
 insert into test1 values(1   ,'abc',     12);
 insert into test1 values(2   ,'xyz',     12);
 insert into test1 values(3   ,'pqr',     12);
 insert into test1 values(4   ,'mno',     3);
 insert into test1 values(5   ,'hij',     1);

 create table test2(id int,displayorder int, date varchar(50));
 insert into test2 values(1,       1,               'date example 1');
 insert into test2 values(1,       2,               'date example 2');
 insert into test2 values(1,       3,               'date example 3');
 insert into test2 values(2,       1,               'date example 4');
 insert into test2 values(2,       2,               'date example 5');
 insert into test2 values(2,       4,               'date example 6');
 insert into test2 values(3,       1,               'date example 7');
 insert into test2 values(3,       2,               'date example 8');
 insert into test2 values(4,       1,               'date example 9');
 

查询#1(使用分组和聚合):

 select t.id,t.name,t.number,  max(case when displayorder=1 then date end)date1,
 max(case when displayorder=2 then date end)date2,
 max(case when displayorder=3 then date end)date3,
 max(case when displayorder=4 then date end)stage4
 from test1 t left join test2 t2 on t.id=t2.id
 group by t.id,t.name,t.number
 GO

输出:

ID 姓名 数字 日期1 日期2 日期3 阶段4
1 美国广播公司 12 日期示例 1 日期示例 2 日期示例 3 <emnull</em
2 xyz 12 日期示例 4 日期示例 5 <emnull</em 日期示例 6
3 pqr 12 日期示例 7 日期示例 8 <emnull</em <emnull</em
4 mno 3 日期示例 9 <emnull</em <emnull</em <emnull</em
5 1 <emnull</em <emnull</em <emnull</em <emnull</em

查询#2(使用数据透视):

 select id,name,number,[1] Date1,[2] Date2,[3] Date3,[4]Stage4
 from
 (
    select t.id,t.name,t.number, displayorder, [date]
    from test1 t left join test2 t2 on t.id=t2.id
 ) t
 pivot
 (
 max([date]) for displayorder in ([1],[2],[3],[4])
 )piv

输出:

ID 姓名 数字 日期2 日期2 日期3 第四阶段
1 美国广播公司 12 日期示例 1 日期示例 2 日期示例 3 <emnull</em
2 xyz 12 日期示例 4 日期示例 5 <emnull</em 日期示例 6
3 pqr 12 日期示例 7 日期示例 8 <emnull</em <emnull</em
4 mno 3 日期示例 9 <emnull</em <emnull</em <emnull</em
5 1 <emnull</em <emnull</em <emnull</em <emnull</em

db<小提琴在这里

于 2021-04-08T12:37:27.060 回答