表A:部门编号                 部门名称
DepartID varchar(100) DepartName varchar(50)
A        最高级主管部门
A01        人力资源部
A02        财务部
A03        制造部
A0301        装配一车间
A0302        装配二车间
A04        销售部 。。表B:
     部门编号            员工编号            卡号                   员工姓名
     DepartID(nvarchar)50  EmpID(nvarchar)50  CardNO(nvarchar)12   EmpName nvarchar 50
A01              HR3002        8671050          AAA
A01              HR3003        4348980          BBB
A0301              MA0301        8876015          CCC
A02              FA001                 8681050          DDD
         A0302                 MA0302                88001060            EEE
 
表C:
DepartID nvarchar 50    部门编号
EmpID nvarchar 30    员工编号
MorningCount smallint 2  早餐次数
AfternoonCount smallint 2  午餐次数
EveningCount smallint 2  晚餐次数
OtherCount smallint 2  其他餐次数记录:
A01 HR3002 4 8 3 5
A01 HR3003 6 3 6 4
A0301 MA0301 1 3 5 3
A0302    MA0302   0         0        0        0
A02 FA001 6 4 6 0
求一个SQL语句,查询结果为:
部门编号,部门名称   早餐合计 午餐合计 晚餐合计 其他餐合计
A         最高级部门   17       18       20       12
A01      人力资源部    10       11       9         9
A02      财务部        6         4       6         0
A03      制造部        1         3       5         3
A0301    装配一车间    1         3       3         3
A0302    装配二车间    0         0       0         0
A04      销售部       0          0       0         0
 

解决方案 »

  1.   

    select C.DepartID,B.DepartName,sum(isnull(MorningCount,0)) as '早餐合计' 
    ,sum(isnull(AfternoonCount,0) ) as '午餐合计' 
    ,sum(isnull(EveningCount ,0) ) as '晚餐合计'
    ,sum(isnull(OtherCount ,0) ) as '其他餐合计 '
     from A Left join C On A.DepartID =C.DepartID 
      

  2.   

    上个有错,试一下这个:select A.DepartID,A.DepartName,sum(isnull(C.MorningCount,0)) as '早餐合计' 
    ,sum(isnull(C.AfternoonCount,0) ) as '午餐合计' 
    ,sum(isnull(C.EveningCount ,0) ) as '晚餐合计'
    ,sum(isnull(C.OtherCount ,0) ) as '其他餐合计 '
     from A Left join C On A.DepartID =C.DepartID 
    group by A.DepartID,A.DepartName
      

  3.   

    select t.DepartID as 部门编号,
    t.DepartName as 部门名称,
    case t.DepartID when 'A' then (select sum(MorningCount) from 表C) else
    isnull(r.MorningCount,0) end as 早餐合计,
    case t.DepartID when 'A' then (select sum(AfternoonCount) from 表C) else
    isnull(r.AfternoonCount,0) end as 午餐合计,
    case t.DepartID when 'A' then (select sum(EveningCount) from 表C) else
    isnull(r.EveningCount,0) end as 晚餐合计,
    case t.DepartID when 'A' then (select sum(OtherCount) from 表C) else
    isnull(r.OtherCount,0) end as 其他餐合计
    from 表A t left join 表C r
    on t.DepartID=r.DepartID
      

  4.   

    --错了
    select t.DepartID as 部门编号,
    t.DepartName as 部门名称,
    case t.DepartID when 'A' then (select sum(MorningCount) from 表C) else
    isnull(r.MorningCount,0) end as 早餐合计,
    case t.DepartID when 'A' then (select sum(AfternoonCount) from 表C) else
    isnull(r.AfternoonCount,0) end as 午餐合计,
    case t.DepartID when 'A' then (select sum(EveningCount) from 表C) else
    isnull(r.EveningCount,0) end as 晚餐合计,
    case t.DepartID when 'A' then (select sum(OtherCount) from 表C) else
    isnull(r.OtherCount,0) end as 其他餐合计
    from 表A t left join 
    (select DepartID,sum(MorningCount) as MorningCount,sum(AfternoonCount) as AfternoonCount,
    sum(EveningCount) as EveningCount,sum(OtherCount) as OtherCount
    from 表C
    group by DepartID)r 
    on t.DepartID=r.DepartID
      

  5.   


    select t1.DepartID as 部门编号 ,t1.DepartName as部门名称,
    sum(isnull(t2.MorningCount,0)) as '早餐合计' 
    ,sum(isnull(t2.AfternoonCount,0) ) as '午餐合计' 
    ,sum(isnull(t2.EveningCount ,0) ) as '晚餐合计'
    ,sum(isnull(t2.OtherCount ,0) ) as '其他餐合计 '
    from A t1 Left join C t2 On t1.DepartID =t2.DepartID 
    group by t1.DepartID,t1.DepartName
      

  6.   

    首先多谢楼上各位高人不吝赐教,不知诸位是否忽略了一点,上级部门应该包含下级部门的总和,如:A03应包含A0301,A0302的数据,A则是包含所有部门的数据