日期:2014-05-17  浏览次数:20599 次

高手求助关于SQL的组合查询
表结构如下
表1 是确定的,不会变化
A
1
2
3
4
5
6
表2会增加,但是C D的列值从表1 A中取例如
B   C   D
1   1    5
2   1    5
3   2    5
4   2    6
5   3    6
6   3    6

我要得到如下的结果
A    5     6 
1    1,2  
2     3     4
3            5
4             6
说明 表1跟表2组合查询 只统计表1当 A 1 2 3 4 的值 表2的C值的与A中匹配,而D例与A中5 6匹配,
如当表1中A=1时 表2 C=1 取时D=5 打印出B值是1,2 
谢谢.

------解决方案--------------------
看了半天,没看明白,估计没人回答也是因为于此
------解决方案--------------------
-- data
if object_id('tempdb.dbo.#tb') is not null drop table #tb
create table #tb(B varchar(8), C varchar(8), D varchar(8))
insert into #tb
select '张一', '语文', '体育' union all
select '张二', '语文', '体育' union all
select '张三', '数学', '美术' union all
select '张四', '语文', '美术'

-- query
;with comp as
(
select C, D, S = stuff((select ','+B from #tb where C=t.C and D=t.D for xml path('')),1,1,'') from #tb t group by C, D
)
select * from comp t pivot(max(S) for D in (体育,美术)) p
/*
C        体育      美术
-------- --------- ---------
数学     NULL      张三
语文     张一,张二 张四
*/