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

分组查询语句
表A
mid mname
11 aa
22 bb
33 cc

表B
aid, aname
1 a
2 b
3 c
4 d
5 e

表C
mid aid value
11 1 v1
11 2 v2
22 2 v3
.....

要得到的结果是:
表A.name, 表B.aname(a), 表B.aname(b), ......(将表B的行比如5行作为列 得到 表C的值 组成一个表)
aa v1 v2 ......

可能我表述的不是很清楚,有点乱,请高手指教

------解决方案--------------------
没说明白还是我没理解?
------解决方案--------------------
SQL code

create table A(id int,[name] varchar(10))
insert into A
select 1 ,'a' union all
select 2 ,'b'
go

create table B(mid int,id int,[value] varchar(10))
insert into B
select 11 ,1 ,'v1' union all
select 11 ,2 ,'v2' union all
select 22 ,1 ,'v3' union all
select 22 ,2 ,'v4'
go

declare @sql varchar(8000)
set @sql = 'select mid'
select @sql = @sql + ',max(case id when '+ltrim(id)+' then [value] else '''' end) as [name('+[name]+')]'
from A
select @sql = @sql + ' from B group by mid'
exec(@sql)

drop table A,B

/***************

mid         name(a)    name(b)
----------- ---------- ----------
11          v1         v2
22          v3         v4

(2 行受影响)

------解决方案--------------------
探讨

我用的是MySQL, 还有两个关联表; 请问:
必须要用存储过程的语句么?

------解决方案--------------------
再写个where
------解决方案--------------------
select 列1, 列2 ,... from where
------解决方案--------------------
我的理解,是说建立一个表C,表C的数据是表B对应数据,以及表B中id对应表A的数据,是么?希望能帮到你
select mid,(select name from 表A join 表B where A.id=B.id ) as namea,name from 表B