两张表生成一张表,有点难度,谢谢!!
我有两张表tab1(id,id1,name) tab2(id,id2,pk,q)
要求生成一张新表
tab(name,pk,q1,q2,q3,q4,)
其中tab1.id1=tab2.id2,其中q只有4种数据类型
tab1(1,kk,王)tab1(2,ww,李)
tab2(1,kk,pk0,q1) tab2(2,kk,pk1,q2)tab2(3,kk,pk0,q2)tab2(4,kk,pk1,q3)
tab2(1,ww,pk0,q1) tab2(3,ww,pk1,q2)tab2(3,ww,pk0,q2)tab2(4,ww,pk1,q3)
生成新表后的数据为
tab(kk,pk0,q1,q2,0,0)
tab(kk,pk1,0,q2,q3,0)
tab(ww,pk0,q1,q2,0,0)
tab(ww,pk1,0,q2,q3,0)
谢谢
------解决方案--------------------你说的和你要的结果不一样啊!
------解决方案----------------------查詢
Select
A.id1,
B.pk,
Max(Case q When 'q1 ' Then 'q1 ' Else '0 ' End) As q1,
Max(Case q When 'q2 ' Then 'q2 ' Else '0 ' End) As q2,
Max(Case q When 'q3 ' Then 'q3 ' Else '0 ' End) As q3,
Max(Case q When 'q4 ' Then 'q4 ' Else '0 ' End) As q4
From
tab1 A
Left Join
tab2 B
On A.id1 = B.id2
Group By
A.id1,
B.pk
------解决方案----------------------生成新表
Select
A.id1,
B.pk,
Max(Case q When 'q1 ' Then 'q1 ' Else '0 ' End) As q1,
Max(Case q When 'q2 ' Then 'q2 ' Else '0 ' End) As q2,
Max(Case q When 'q3 ' Then 'q3 ' Else '0 ' End) As q3,
Max(Case q When 'q4 ' Then 'q4 ' Else '0 ' End) As q4
Into tab3 --加入此行代碼
From
tab1 A
Left Join
tab2 B
On A.id1 = B.id2
Group By
A.id1,
B.pk
------解决方案--------------------这么快!
------解决方案--------------------create table tab1(id int,id1 varchar(10),name varchar(10))
insert tab1
select 1, 'kk ', '王 '
union select 2, 'ww ', '李 '
create table tab2(id int,id2 varchar(10),pk varchar(10),q varchar(10))
insert tab2
select 1, 'kk ', 'pk0 ', 'q1 '
union select 2, 'kk ', 'pk1 ', 'q2 '
union select 3, 'kk ', 'pk0 ', 'q2 '
union select 4, 'kk ', 'pk1 ', 'q3 '
union select 1, 'ww ', 'pk0 ', 'q1 '
union select 3, 'ww ', 'pk1 ', 'q2 '
union select 3, 'ww ', 'pk0 ', 'q2 '
union select 4, 'ww ', 'pk1 ', 'q3 '
select
a.id1,
b.pk,
Max(Case q When 'q1 ' Then 'q1 ' Else '0 ' End) As q1,
Max(Case q When 'q2 ' Then 'q2 ' Else '0 ' End) As q2,
Max(Case q When 'q3 ' Then 'q3 ' Else '0 ' End) As q3,
Max(Case q When 'q4 ' Then 'q4 ' Else '0 ' End) As q4
from tab1 a Left Join tab2 b on a.id1 = b.id2
group by
a.id1,
b.pk
order by a.id1
drop table tab1 , tab2
/*
id1 pk q1 q2 q3 q4
---------- ---------- ---- ---- ---- ----
kk pk0 q1 q2 0 0
kk pk1 0 q2 q3 0
ww pk0 q1 q2 0 0
ww pk1 0 q2 q3 0
(4 row(s) affected)
*/
------解决方案--------------------select