本人很菜..
表:A  字段: ID , sfhx
       值   1  ,  0
       值   2  ,  0
       值   3  ,   1表:B(A的子表ID)  字段: ID , NAME  ,  HEAD  ,  COUNT
                  值   1  , 名称1 ,  H1        100
值   1  , 名称1 ,  H1        100
                  值   1  , 名称1 ,  H2        50
                  值   2  , 名称2 ,  H1        100
                  值   2  , 名称2 ,  H2        80
                  值   3  , 名称2 ,  H1        50
表:C  字段: CID , NAME  ,  HEAD  ,  COUNT , sfhx
       值   1  , 名称1 ,     H1        50    ,  0
       值   1  , 名称1 ,     H2        40    ,  0
       值   2  , 名称2 ,     H1        50    ,  0
值   2  , 名称2 ,     H1        50    ,  1
================================================================================
Select * from B where id in (select id from A where sfhx=0)查询结果:         字段: ID , NAME  ,  HEAD  ,  COUNT
                  值   1  , 名称1 ,  H1        100
值   1  , 名称1 ,  H1        100
                  值   1  , 名称1 ,  H2        50
                  值   2  , 名称2 ,  H1        100
                  值   2  , 名称2 ,  H2        80
                 
Select * from C 查询结果:        字段: CID , NAME  ,  HEAD  ,  COUNT , sfhx
                  值   1  , 名称1 ,     H1        50    ,  0
                  值   1  , 名称1 ,     H2        40    ,  0
                  值   2  , 名称2 ,     H1        50    ,  0
=============================================================
这个查询结果是错误的
Select  B.NAME , B.HEAD ,B. COUNT AS BC, A. COUNT AS AC from A,B
WHERE B. id in (select id from A where sfhx=0)
AND B.NAME=A. NAME 
AND B.HEAD =A.HEAD
AND C.sfhx=0
Group by  B.NAME , B.HEAD   /这个查询结果是错误的===========================================================
我现在想要的结果是:
查询结果:         字段:  NAME  ,  HEAD  ,  AC  ,  BC
                  值     名称1 ,    H1        200    50
                  值     名称1 ,    H2        50     40
                  值     名称2 ,    H1        100    50
                  值     名称2 ,    H2        80     
====================================================================请问,,我想要这个结果,这条SQL语句我改怎样写..
其实可以把表C拆开,成两个表,,表A和表B就是一个拆开的表..希望大家能理解我的意思
但是,,现在只能这样,,不能改动这三个表,,却要求我想要的结果
这句SQL要怎么写,,
分不够再加...

解决方案 »

  1.   

    晕..我在WORD写好了,,没想到在CSDN里面显示这么乱
      

  2.   

    不好意思,,我重新排下版 
    表:A     字段:   ID   ,   sfhx 
             值       1     ,     0 
             值       2     ,     0 
             值       3     ,       1 表:B(A的子表ID)  字段:   ID   ,   NAME    ,    HEAD  ,   COUNT 
                    值       1    ,   名称1   ,     H1         100 
                    值       1    ,   名称1   ,     H1         100 
                    值       1    ,   名称1   ,     H2         50 
                    值       2    ,   名称2   ,     H1         100 
                    值       2    ,   名称2   ,     H2         80 
                    值       3    ,   名称2   ,     H1         50 
    表:C  字段:   CID   ,   NAME    ,     HEAD  ,   COUNT   ,   sfhx 
          值       1     ,   名称1   ,      H1         50    ,     0 
          值       1     ,   名称1   ,      H2         40    ,     0 
          值       2     ,   名称2   ,      H1         50    ,     0 
          值       2     ,   名称2   ,      H1         50    ,     1 
    ================================================================================ 
    Select * from B where id in (select id from A where sfhx=0) 查询结果:  字段:   ID   ,   NAME     ,     HEAD     ,     COUNT 
               值       1     ,   名称1   ,     H1             100 
               值       1     ,   名称1   ,     H1             100 
               值       1     ,   名称1   ,     H2             50 
               值       2     ,   名称2   ,     H1             100 
               值       2     ,   名称2   ,     H2             80 
                                      
    Select   *   from   C   查询结果:    字段:   CID   ,   NAME    ,   HEAD  ,   COUNT   ,   sfhx 
                值       1     ,   名称1   ,   H1    ,   50      ,     0 
                值       1     ,   名称1   ,   H2    ,   40      ,     0 
                值       2     ,   名称2  ,    H1     ,  50      ,     0 
    ============================================================= 
    这个查询结果是错误的 
    Select  B.NAME, B.HEAD ,B.COUNT AS BC, A.COUNT AS AC from   A,B 
    WHERE B.id  in  (select id from  A  where  sfhx=0) 
    AND   B.NAME=A.NAME   
    AND   B.HEAD=A.HEAD 
    AND   C.sfhx=0 
    Group by B.NAME,B.HEAD       /这个查询结果是错误的 =========================================================== 
    我现在想要的结果是: 
    查询结果:   字段:     NAME    ,     HEAD     ,     AC     ,  BC 
               值         名称1   ,       H1     ,     200     ,  50 
               值         名称1   ,       H2     ,      50     ,  40 
               值         名称2   ,       H1           100     ,  50 
               值          名称2   ,      H2            80      ,  0     
    ==================================================================== 请问,,我想要这个结果,这条SQL语句我改怎样写.. 
    其实可以把表C拆开,成两个表,,表A和表B就是一个拆开的表..希望大家能理解我的意思 
    但是,,现在只能这样,,不能改动这三个表,,却要求我想要的结果 
    这句SQL要怎么写,, 
    分不够再加...
      

  3.   


    SELECT T.NAME,T.HEAD,T.[COUNT] AS BC,T1.[COUNT] AS ACFROM A JOIN (SELECT ID,NAME,HEAD,SUM([COUNT]) AS [COUNT] FROM B GROUP BY ID,NAME,HEAD) AS T
    ON A.ID=T.IDJOIN (SELECT CID,NAME,HEAD,SUM([COUNT]) AS [COUNT] FROM C GROUP BY CID,NAME,HEAD) AS T1
    ON A.ID=T1.ID WHERE A.sfhx=0
    试试
      

  4.   

    SELECT T.NAME,T.HEAD,T1.[COUNT] AS AC,ISNULL(T.[COUNT],0) AS BCFROM 
    (
    SELECT ID,NAME,HEAD,SUM([COUNT]) AS [COUNT] 
    FROM B WHERE ID IN ( SELECT ID FROM A WHERE sfhx=0) 
    GROUP BY ID,NAME,HEAD ) AS TLEFT JOIN (SELECT CID,NAME,HEAD,SUM([COUNT]) AS [COUNT] 
    FROM C WHERE ID IN ( SELECT ID FROM A WHERE sfhx=0) 
    GROUP BY CID,NAME,HEAD )AS T1ON T.NAME=T1.NAME AND T.HEAD=T1.HEAD
      

  5.   

    -- =========================================
    -- -----------t_mac 小编-------------
       ---希望有天成为大虾---- 
    -- =========================================IF OBJECT_ID('a') IS NOT NULL
      DROP TABLE a
    GO
    CREATE TABLE a(ID int,sfhx int )
    go
    insert a SELECT 1,0
    UNION ALL SELECT 2,0
    UNION ALL SELECT 3,1
    go
    IF OBJECT_ID('b') IS NOT NULL
      DROP TABLE b
    GO
    CREATE TABLE b(ID int,name varchar(10),head varchar(10),count int )
    go
    insert b SELECT
                        1    ,  '名称1'  ,    'H1'      ,  100  union all select 
                          1    ,  '名称1'  ,    'H1'     ,   100 union all select 
                          1    ,  '名称1'  ,    'H2'    ,    50 union all select 
                         2    ,  '名称2'  ,    'H1'     ,   100 union all select 
                         2    ,  '名称2'  ,    'H2'     ,   80 union all select 
                         3    ,  '名称2'  ,    'H1'     ,   50 
    go
    IF OBJECT_ID('c') IS NOT NULL
      DROP TABLE c
    GO
    CREATE TABLE c(cID int,name varchar(10),head varchar(10),count int,sfhx int  )
    go
    insert c SELECT
       1    ,  '名称1'  ,  'H1'    ,  50      ,    0  union all select 
       1    ,  '名称1'  ,  'H2'    ,  40      ,    0  union all select 
       2    ,  '名称2'  ,    'H1'    ,  50      ,    0 union all select 
       2    ,  '名称2'  ,      'H1'    ,    50    ,    1 
    go
    select distinct t.name,t.head,AC=t.count,BC=isnull(c.count,0)
    from  (select name,ID,head,SUM(COUNT) as count from b group by name,ID,head) t
           join a on a.ID=t.ID  left join c on t.id=c.cID and t.name=c.name and t.head=c.head
     where a.sfhx=0
    /*------------
    name       head       AC          BC
    ---------- ---------- ----------- -----------
    名称1        H1         200         50
    名称1        H2         50          40
    名称2        H1         100         50
    名称2        H2         80          0
    -------*/
      

  6.   

    -- =========================================
    -- -----------t_mac 小编-------------
       ---希望有天成为大虾---- 
    -- =========================================IF OBJECT_ID('a') IS NOT NULL
      DROP TABLE a
    GO
    CREATE TABLE a(ID int,sfhx int )
    go
    insert a SELECT 1,0
    UNION ALL SELECT 2,0
    UNION ALL SELECT 3,1
    go
    IF OBJECT_ID('b') IS NOT NULL
      DROP TABLE b
    GO
    CREATE TABLE b(ID int,name varchar(10),head varchar(10),count int )
    go
    insert b SELECT
                        1    ,  '名称1'  ,    'H1'      ,  100  union all select 
                          1    ,  '名称1'  ,    'H1'     ,   100 union all select 
                          1    ,  '名称1'  ,    'H2'    ,    50 union all select 
                         2    ,  '名称2'  ,    'H1'     ,   100 union all select 
                         2    ,  '名称2'  ,    'H2'     ,   80 union all select 
                         3    ,  '名称2'  ,    'H1'     ,   50 
    go
    IF OBJECT_ID('c') IS NOT NULL
      DROP TABLE c
    GO
    CREATE TABLE c(cID int,name varchar(10),head varchar(10),count int,sfhx int  )
    go
    insert c SELECT
       1    ,  '名称1'  ,  'H1'    ,  50      ,    0  union all select 
       1    ,  '名称1'  ,  'H2'    ,  40      ,    0  union all select 
       2    ,  '名称2'  ,    'H1'    ,  50      ,    0 union all select 
       2    ,  '名称2'  ,      'H1'    ,    50    ,    1 
    go
    select distinct t.name,t.head,AC=isnull(t.count,0),BC=isnull(c.count,0)
    from  (select name,ID,head,SUM(COUNT) as count from b group by name,ID,head) t
           join a on a.ID=t.ID  left join c on t.id=c.cID and t.name=c.name and t.head=c.head
     where a.sfhx=0
    /*------------
    name       head       AC          BC
    ---------- ---------- ----------- -----------
    名称1        H1         200         50
    名称1        H2         50          40
    名称2        H1         100         50
    名称2        H2         80          0
    -------*/
      

  7.   

    IF OBJECT_ID('a') IS NOT NULL
      DROP TABLE a
    GO
    CREATE TABLE a(ID int,sfhx int )
    go
    insert a SELECT 1,0
    UNION ALL SELECT 2,0
    UNION ALL SELECT 3,1
    go
    IF OBJECT_ID('b') IS NOT NULL
      DROP TABLE b
    GO
    CREATE TABLE b(ID int,name varchar(10),head varchar(10),count int )
    go
    insert b SELECT
                        1    ,  '名称1'  ,    'H1'      ,  100  union all select 
                          1    ,  '名称1'  ,    'H1'     ,   100 union all select 
                          1    ,  '名称1'  ,    'H2'    ,    50 union all select 
                         2    ,  '名称2'  ,    'H1'     ,   100 union all select 
                         2    ,  '名称2'  ,    'H2'     ,   80 union all select 
                         3    ,  '名称2'  ,    'H1'     ,   50 
    go
    IF OBJECT_ID('c') IS NOT NULL
      DROP TABLE c
    GO
    CREATE TABLE c(cID int,name varchar(10),head varchar(10),count int,sfhx int  )
    go
    insert c SELECT
       1    ,  '名称1'  ,  'H1'    ,  50      ,    0  union all select 
       1    ,  '名称1'  ,  'H2'    ,  40      ,    0  union all select 
       2    ,  '名称2'  ,    'H1'    ,  50      ,    0 SELECT T.NAME,T.HEAD,T.[COUNT] AS AC,ISNULL(T1.[COUNT],0) AS BCFROM 
    (
    SELECT ID,NAME,HEAD,SUM([COUNT]) AS [COUNT] 
    FROM B WHERE ID IN ( SELECT ID FROM A WHERE sfhx=0) 
    GROUP BY ID,NAME,HEAD ) AS TLEFT JOIN (SELECT CID,NAME,HEAD,SUM([COUNT]) AS [COUNT] 
    FROM C WHERE CID IN ( SELECT ID FROM A WHERE sfhx=0) 
    GROUP BY CID,NAME,HEAD )AS T1ON  T.ID=T1.CID ANDT.NAME=T1.NAME AND T.HEAD=T1.HEADNAME       HEAD       AC          BC          
    ---------- ---------- ----------- ----------- 
    名称1        H1         200         50
    名称1        H2         50          40
    名称2        H1         100         50
    名称2        H2         80          0(所影响的行数为 4 行)
      

  8.   

    declare @a table(ID int,sfhx bit)
    insert @a select 1,0 
    insert @a select 2,0 
    insert @a select 3,1 declare @b table(ID int,NAME nvarchar(10),HEAD varchar(10),[COUNT] int)
    insert @b select 1    ,  N'名称1'  ,    'H1'   ,     100 
    insert @b select 1    ,  N'名称1'  ,    'H1'   ,     100 
    insert @b select 1    ,  N'名称1'  ,    'H2'   ,     50 
    insert @b select 2    ,  N'名称2'  ,    'H1'   ,     100 
    insert @b select 2    ,  N'名称2'  ,    'H2'   ,     80 
    insert @b select 3    ,  N'名称2'  ,    'H1'   ,     50 declare @c table(CID int,NAME nvarchar(10),HEAD varchar(10),[COUNT] int,sfhx bit)
    insert @c select 1    ,  N'名称1'  ,      'H1'  ,      50    ,    0 
    insert @c select 1    ,  N'名称1'  ,      'H2'  ,      40    ,    0 
    insert @c select 2    ,  N'名称2'  ,      'H1'  ,      50    ,    0 
    insert @c select 2    ,  N'名称2'  ,      'H2'  ,      50    ,    1 select b.name,b.head,ac=b.[count],bc=isnull(c.count,0) from @a a
    left join (select id,name,head,[count]=sum([count]) from @b group by id,name,head) b on a.id=b.id
    left join @c c on b.id=c.cid and b.name=c.name and b.head=c.head and c.sfhx=0
    where a.sfhx=0 /*
    name       head       ac          bc          
    ---------- ---------- ----------- ----------- 
    名称1        H1         200         50
    名称1        H2         50          40
    名称2        H1         100         50
    名称2        H2         80          0(所影响的行数为 4 行)
    */