現有以下三張表,分別為:diqu(地區表),zhiye(職業表),info(資訊表)
最基本的分組查詢
1這樣就得到info(資訊表)裡各地區、各職業的人數。如果想看得更直觀,可以用inner joinselect dqid,jbid,count(1) from info group
by dqid,jbid
1得到結果:select
max(dqname) 地區,max(zyname) 職業,count(1) 人數 from
info
2inner
join diqu on info.dqid=
diqu.id
3inner
join zhiye on info.zyid=
zhiye.id
4group
by dqid,zyid order
by dqid
可是這樣只能查到info(資訊表)裡的人數,如果我們需要查詢每個地區、職業的人數,可以用cross join
1得到結果:select dqname 地區,zyname 職業,(select
count(1) from info where dqid=c.dqid and zyid=c.zyid) 人數 from
2 (select dqname,diqu.id dqid,zyname,zhiye.id zyid from diqu cross
join
zhiye) c
3order
by c.dqid
這樣就得到我們想要的結果,可還是不夠直觀,可以再列轉行
1得到結果:declare
@sql
varchar(8000)2
select
@sql
=isnull(@sql+'
,','')+zyname from zhiye order
byid
3set
@sql='
select * from (
4select dqid,dqname 地區,zyname 職業,(select count(1) from info where dqid=c.dqid and zyid=c.zyid) 人數 from
5(select dqname,diqu.id dqid,zyname,zhiye.id zyid from diqu cross join zhiye) c
6) b pivot (max(人數) for 職業 in ('+
@sql+'
))a'
7exec(@sql)
動態分組查詢
示例資料 create table 表 id int,num int insert 表 select 1,2 union all select 2,3 union all select 3,2 union all select 4,2 union all select 5,12 union all ...
動態分組查詢
示例資料 create table 表 id int,num int insert 表 select 1,2 union all select 2,3 union all select 3,2 union all select 4,2 union all select 5,12 union all ...
動態分組查詢
示例資料 create table 表 id int,num int insert 表 select 1,2 union all select 2,3 union all select 3,2 union all select 4,2 union all select 5,12 union all ...