SQL動態化多個分組查詢

2022-06-27 12:00:12 字數 1678 閱讀 9753

現有以下三張表,分別為:diqu(地區表),zhiye(職業表),info(資訊表)

最基本的分組查詢

1

select dqid,jbid,count(1) from info group

by dqid,jbid

這樣就得到info(資訊表)裡各地區、各職業的人數。如果想看得更直觀,可以用inner join

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 ...