题目:
板(S)表:
 ID    name
---------------------
 1      第一板数
 2      第二板数箱(X)表:
 ID  name sname
----------------------
  1   A箱  第一板数
  2   B箱  第一板数
  3   C箱  第二板数
  4   E箱  第二板数
  5   F箱  第二板数个(G)表:
 ID  name Xname
--------------------
  1   L个   A箱
  1   p个   A箱
  1   m个   B箱
  1   T个   A箱
  1   V个   C箱
  1   Q个   D箱
  1   N个   F箱
//  
 要求结果:ID sname     箱数(count)           个数(count)
--------------------------------------------------------------------
1   第一板数   2(包含2箱)           4(A箱包含3个+B箱包含1个)
2   第二板数   3(包含3箱)           3(C箱包含1个+D箱包含1个+E箱包含0个+F箱包含1个)----
谢谢各位...
 

解决方案 »

  1.   

    select s.id,s.name,count(x.sname),sum(g.name)
    from s inner join x on s.name=x.name inner join g on g.xname=x.nae
    group by s.id,s.name
      

  2.   

    select s.id,s.name,count(x.sname),sum(g.name)
    from s inner join x on s.name=x.name inner join g on g.xname=x.name
    group by s.id,s.name
      

  3.   


    select
    s.ID,
    s.Name,
    箱数=count(distinct x.Name),
    个数=count(*)
    from 
    S
    join
    X on x.Sname=s.name
    join
    G on G.xname=x.Name
    group by s.ID,s.Name
    2005select
    s.ID,
    s.Name,
    箱数=count(x.Name) over(partition by x.sname ),--2005用
    个数=count(*)
    from 
    S
    join
    X on x.Sname=s.name
    join
    G on G.xname=x.Name
    group by s.ID,s.Name
      

  4.   

    create table S(ID int, name varchar(10))
    insert into S values(1 , '第一板数') 
    insert into S values(2 , '第二板数')
    create table X(ID int, name varchar(10) , sname varchar(10))
    insert into X values(1 , 'A箱' , '第一板数') 
    insert into X values(2 , 'B箱' , '第一板数') 
    insert into X values(3 , 'C箱' , '第二板数') 
    insert into X values(4 , 'E箱' , '第二板数') 
    insert into X values(5 , 'F箱' , '第二板数')
    create table G(ID int, name varchar(10) , xname varchar(10)) 
    insert into G values(1 , 'L个' , 'A箱') 
    insert into G values(1 , 'p个' , 'A箱') 
    insert into G values(1 , 'm个' , 'B箱') 
    insert into G values(1 , 'T个' , 'A箱') 
    insert into G values(1 , 'V个' , 'C箱') 
    insert into G values(1 , 'Q个' , 'D箱') 
    insert into G values(1 , 'N个' , 'F箱') 
    goselect S.* , count(distinct X.name) [箱数(count)], count(*) [个数(count)] from S 
    left join X on S.name = X.sname 
    left join G on X.name = G.xname
    group by S.id , S.name
    order by S.id , S.namedrop table S , X , G/*
    ID          name       箱数(count)   个数(count)   
    ----------- ---------- ----------- ----------- 
    1           第一板数       2           4
    2           第二板数       3           3(所影响的行数为 2 行)
    */
      

  5.   

    select S.* , count(distinct X.name) [箱数], count(*) [个数]
    from S 
    left join X on S.name = X.sname 
    left join G on X.name = G.xname
    group by S.id , S.name
    order by S.id , S.name
      

  6.   


    select s.*,箱数=count(distinct x.id),个数=count(*)
    from s 
    left join x on s.name=x.sname
    left join g on x.name=g.xname
    group by s.id,s.name
    order by s.id
      

  7.   

    好像不用和板表相联:
    select x.sname,箱数=count(distinct x.id),个数=count(*)
    from g join x on g.xname=x.name
    group by x.sname
      

  8.   

    呀,原来是这样子的呀!求只要箱数+一个distinct,.
    害得怎么老是多几个数据....谢谢各位!@!