原问题:
表A
ID (主键) 名称
1         CPU
2         MEMORY
3         LCD
4         MOUSE

表B
ID       B数量     单位
1        12       公斤
1        5        箱
2        10       公斤
2        15       公斤

表C
ID       C数量     单位
1        5        公斤
3        10       公斤

表D
ID       D数量     单位
1        10       箱
2        10       箱
3        5        箱

要把四个表连接起来并按单位加总达到下面结果
ID    名称    B数量   C数量   D数量  单位
===== ======= ======= ======= ====== ====
1     CPU     12      5       0      公斤
1     CPU     5       0       10     箱
2     MEMORY  25      0       0      公斤
2     MEMORY  0       0       10     箱
3     LCD     0       10      0      公斤
3     LCD     0       0       5      箱


下面是解决的方法:

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 210 ,'公斤'
union all select 2 ,15 ,'公斤'

create table C (ID int, C数量 int,单位  varchar(20))
insert c select 1 ,5 ,'公斤'
union all select 310 ,'公斤'

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 ENDAS [B数量]
    ,
MAX(CASE B.BillType WHEN 2 THEN B.数量 ELSE 0 ENDAS [C数量]
    ,
MAX(CASE B.BillType WHEN 3 THEN B.数量 ELSE 0 ENDAS [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


结果:

解决一个多表链接问题结果:
解决一个多表链接问题名称                B数量    C数量    D数量    单位
解决一个多表链接问题
--------------------------------------
解决一个多表链接问题
CPU                   12             5             0          公斤
解决一个多表链接问题CPU                   
5               0             10          箱
解决一个多表链接问题MEMORY       
25             0                0       公斤
解决一个多表链接问题MEMORY          
0             0             10          箱
解决一个多表链接问题LCD                   
0             10             0          公斤
解决一个多表链接问题LCD                   
0                0             5          箱

其实还有其他方法,这里只不过是记录一下我自己的解决方法,方便以后查阅。
来源:http://community.csdn.net/Expert/topic/5530/5530732.xml?temp=.7443048

相关文章:

  • 2022-01-03
  • 2021-08-30
  • 2022-12-23
  • 2022-12-23
  • 2021-08-11
  • 2021-06-06
  • 2022-12-23
猜你喜欢
  • 2022-03-08
  • 2021-09-13
  • 2022-01-08
  • 2022-12-23
  • 2022-12-23
  • 2021-11-18
  • 2021-10-09
相关资源
相似解决方案