2015-03-19 123 views
1

我有三个表:MySQL的连接查询的三个表

asset_details 
------------------------------ 
asset_no asset_type_id 
------------------------------ 
AS1  id1 
AS2  id2 
AS3  id1 
AS4  id3 
AS5  id1 
-------------------------------- 

asset_customer_mapping 
-------------------------------- 
asset_no customer_site_id 
-------------------------------- 
AS1  site1 
AS2  site1 
AS3  site2 
AS4  site4 
AS5  site1 

asset_type_mst 
------------------------------- 
asset_type_id asset_type_name 
------------------------------- 
id1  Desktop 
id2  Laptop 
id3  Printer 
id4  Plotter 
id5  Router 

现在我需要从MySQL以下结果:

SiteName | Desktop | Laptop | Printer | Plotter | Router | Total 
----------------------------------------------------------------- 
site1 | 2  | 1  | 0 | 0 | 0 | 3 
site2 | 1  | 0  | 0 | 0 | 0 | 1 
site3 | 0  | 0  | 0 | 0 | 0 | 0 
site4 | 0  | 0  | 1 | 0 | 0 | 1 
site5 | 0  | 0  | 0 | 0 | 0 | 0 
---------------------------------------------------------------- 
Total | 3  | 1  | 1 | 0 | 0 | 5 

我已经wriiten下面的查询组customer_site_ids

select b.customer_site_id,count(*) from asset_details a,asset_customer_mapping b,asset_type_mst c 
where a.asset_no=b.asset_no and a.asset_type_id=c.asset_type_id 
group by b.customer_site_id; 

但我无法获得类型方面的分离以获得所需的结果。任何帮助,高度赞赏。由于

+0

asset_type_mst中只有5个值?或者你希望这是虚拟的? – amow 2015-03-19 06:42:02

+0

asset_type_mst中会有5个以上的值,但它会被修复。 – 2015-03-19 07:16:13

回答

1
set @fs=''; 

select @fs:=concat(@fs,'sum(if(asset_type_name=\'',asset_type_name,'\',1, 0)) as ', asset_type_name, ',') 
    from (select distinct asset_type_name from asset_type_mst) A; 

set @statq=concat('select ifnull(customer_site_id, \'total\') sitename,', @fs, 'count(1) as total', 
       ' from asset_details d join asset_customer_mapping c on d.asset_no = c.asset_no', 
       ' join asset_type_mst a on d.asset_type_id=a.asset_type_id', 
       ' group by customer_site_id WITH ROLLUP'); 

prepare stmt from @statq; 
execute stmt; 

SQL小提琴here

首先声明一个fs使用所有asset_type_nameasset_type_mst动态sum(if)陈述结合起来。
然后准备一个陈述,使用concat动态总和(if)陈述fs通过陈述正常组。

+0

非常感谢..作品像魅力:) – 2015-03-19 11:09:01