Mysql实现行转列

create table loc(loc varchar(50),xiaoqu varchar(50),addr varchar(50),company varchar(50))

 

插入数据

区域

小区名称

房屋地址

中介公司

宝山

庆安三村

绥化路52弄

A

宝山

月浦十村

月浦十村67号

B

宝山

盛桥三村

盛桥三村94号

C

宝山

月浦四村

月浦四村42号

D

宝山

乐业二村

春雷路332弄

E

宝山

月浦二村

月浦二村19号

B

宝山

阳光美林苑

月富路218弄

C

宝山

月浦六村

月浦六村7号

F

宝山

春雷路431弄小区

春雷路431弄

B

宝山

新月明珠园

塔源路150弄

B

宝山

盛桥三村

盛桥三村1号

G

 

 

SET @sq1='';

SELECT @sq1:=CONCAT(@sq1,'SUM(IF(xiaoqu=\'',xiaoqu,'\'',',1,0)) AS ',xiaoqu,',') as col4 FROM (select distinct xiaoqu from loc) a

SET @sq2=CONCAT('SELECT ifnull(company,\'total\') AS companyname,count(distinct xiaoqu) as xiaoqucnt,',LEFT(@sq1,LENGTH(@sq1)-1),' sum(xiaoqu) as total  FROM  loc GROUP BY company WITH ROLLUP');

PREPARE statm FROM @sq2;

EXECUTE statm;


输出结果

companyname xiaoqucnt 庆安三村 月浦十村 盛桥三村 月浦四村 乐业二村 月浦二村 阳光美林苑 月浦六村 春雷路431弄小区 新月明珠园 total
A 1 1 0 0 0 0 0 0 0 0 0 0
B 4 0 1 0 0 0 1 0 0 1 1 0
C 2 0 0 1 0 0 0 1 0 0 0 0
D 1 0 0 0 1 0 0 0 0 0 0 0
E 1 0 0 0 0 1 0 0 0 0 0 0
F 1 0 0 0 0 0 0 0 1 0 0 0
G 1 0 0 1 0 0 0 0 0 0 0 0
total 10 1 1 2 1 1 1 1 1 1 1 0


你可能感兴趣的:(mysql,sql)