技术开发 频道

解决一个多表链接问题


【IT168技术文档】

create table A (ID int, 名称 varchar(20)) insert A select 1 ,'CPU' union all select 2 ,'MEMORY' union all select 3 ,'LCD' union all select 4 ,'MOUSE' create table B (ID int, B数量 int, 单位 varchar(20)) insert b select 1 ,12 ,'公斤' union all select 1 ,5 ,'' union all select 2, 10 ,'公斤' union all select 2 ,15 ,'公斤' create table C (ID int, C数量 int,单位 varchar(20)) insert c select 1 ,5 ,'公斤' union all select 3, 10 ,'公斤' create table D ( ID int, D数量 int, 单位 varchar(20)) insert d select 1 ,10 ,'' union all select 2 ,10 ,'' union all select 3 ,5, '' SELECT A.[名称] ,MAX(CASE B.BillType WHEN 1 THEN B.数量 ELSE 0 END) AS [B数量] ,MAX(CASE B.BillType WHEN 2 THEN B.数量 ELSE 0 END) AS [C数量] ,MAX(CASE B.BillType WHEN 3 THEN B.数量 ELSE 0 END) AS [D数量] ,B.[单位] FROM A AS A INNER JOIN (SELECT [id],sum(B数量) AS [数量],[单位],1 AS BillType FROM B GROUP BY [id],[单位] UNION ALL SELECT [id],sum(C数量),[单位],2 FROM C GROUP BY [id],[单位] UNION ALL SELECT [id],sum(D数量),[单位],3 FROM D GROUP BY [id],[单位] ) AS B ON A.[id]=B.[id] GROUP BY A.[id],A.[名称],B.[单位] drop table A drop table B drop table C drop table D
0
相关文章