• 解决一个多表链接问题


    原问题:
    表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
  • 相关阅读:
    android -- eclipse 环境搭建
    android AVD坑(1) -- no images system installed for this target
    android AVD坑(1) -- no images system installed for this target
    简单的轮播
    C# 使用NPOI 处理Excel(Datable与Excel相互转换)
    C盘突然爆满
    IIS中 flv、swf 文件无法播放
    webservice 尝试加载 Oracle 客户端库时引发 BadImageFormatException。如果在安装 32 位 Oracle 客户端组件的情况下运行,将出现此问题
    window server 2008 安装Oracle10g
    ora-01033 oracle initialization or
  • 原文地址:https://www.cnblogs.com/wghao/p/746659.html
Copyright © 2020-2023  润新知