zoukankan      html  css  js  c++  java
  • 解决一个多表链接问题

    原问题:
    表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
  • 相关阅读:
    [转载]实战经验:IIS网站服务器性能优化攻略
    如何检测本页中的iframe是否“加载”完成
    悟透JavaScript读书笔记闭包与原型
    HttpConnection访问时ArrayIndexOutofBoundException的解释[javaME]
    [JavaME]手机同时播放两个音乐 探讨一
    封装MIDP 1.0 HttpConnection用于商业应用[javaME]
    Nokia S60真机的全屏getHeight()返回值BUG说明
    [JavaME]在高级UI上的keyPressed事件截获的说明
    手机同时播放两个音乐 探讨二[JavaME]
    Bloglines手机伴侣开发纪事[1][j2me]
  • 原文地址:https://www.cnblogs.com/wghao/p/746659.html
Copyright © 2011-2022 走看看