日期:2014-05-18  浏览次数:20686 次

两张表生成一张表,有点难度,谢谢!!
我有两张表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