表A:部门信息表departid(部门代码)varchar 100 departname (部门名称)varchar 30 departempCount (部门人数) int
A **公司   
A01 总务部
A0101 人事部
A0102 公关部
A02 制造部  
A0201 装配一车间
A0202 装配二车间
A03 财务部
A04 销售部
。。表B :员工信息表
Code nvarchar 50
Cardid nvarchar 50
UserName nvarchar 50
DepartID nvarchar 50
HR1001 8198293 AAA A01
SA8005 2052126 BBB A03
.....表C:就餐时段表
EatName char  10
StartTime datetime  8
EndTime datetime  8
Price money  8 晚餐       17:00:00 23:00:00 12
午餐       11:00:00 16:00:00 8
早餐       06:00:00 08:00:00 6
....EmployeeID varchar 20 1
CheckDate datetime 8 1
CheckTime varchar 8 1
Morning   int 4 1
AfterNoon   int 4 1
Evening   int 4 1
Other   int 4 1
Price   int 4 1
MachineID  int 4 1
AllTime datetime 8 1HR1001 2010-06-06 21:21:00   0 0 1 0 12 2 2010-06-06 21:21:00
HR1001 2010-06-06 07:22:00   1 0 0 0 6 2 2010-06-06 21:22:00
SA8005   2010-06-06 14:22:00   0 1 0 0 8 2 2010-06-06 21:22:00
SA8005   2010-06-06 7:25:00   1 0 0 0 6 2 2010-06-06 21:22:00
.....求一SQL语句,要求实现的结果是:部门代码  部门名称   早餐次数 早餐金额  午餐次数  午餐金额 晚餐次数 晚餐金额  其他餐次数 其他餐金额  合计金额
A **公司     2       12       1         8        1       12          0         0           32 
A01 总务部     1        6       0         0         1       12          0         0           18 
A02      制造部     1        6       1        8        0        0          0         0           14
A03 财务部     0        0       0        0        0        0          0         0            0
.....也就是对各部门和各时段的餐次进行汇总,下级部门要汇总到上级部门中,比如部门代码A0101的数据要汇总到部门代码A01中,而A01中的数据要汇总到A中

解决方案 »

  1.   

    我只做到了:
    A **公司    2  1  1  0  32  
    A01 总务部  1  0  1  0  18
    A02 制造部  1  1  0  0  14
    A03 财务部  0 0 0 0 0 0 0 0 0次数统计出来了,不过各时段的金额没有上去,正在苦恼中。,还希望高手出来点拨
      

  2.   

    这张就是,忘了说明了,员工就餐表
    EmployeeID varchar 20 1
    CheckDate datetime 8 1
    CheckTime varchar 8 1
    Morning int 4 1
    AfterNoon int 4 1
    Evening int 4 1
    Other int 4 1
    Price int 4 1
    MachineID int 4 1
    AllTime datetime 8 1HR1001 2010-06-06 21:21:00 0 0 1 0 12 2 2010-06-06 21:21:00
    HR1001 2010-06-06 07:22:00 1 0 0 0 6 2 2010-06-06 21:22:00
    SA8005 2010-06-06 14:22:00 0 1 0 0 8 2 2010-06-06 21:22:00
    SA8005 2010-06-06 7:25:00 1 0 0 0 6 2 2010-06-06 21:22:00
    .....
      

  3.   

    测试数据最好格式化一下tbname1
    col1 col2 ......
    val1 val2 ......tbname2
    col1 col2 ......
    val1 val2 ......
      

  4.   

    htl258,大虾来了,看到希望了
      

  5.   


    IF OBJECT_ID('[tba]') IS NOT NULL
        DROP TABLE [tba]
    GO
    CREATE TABLE [tba] (departid varchar (100), departname  varchar (30), departempCount  int)
    INSERT INTO [tba]
    SELECT 'A', '**公司',null union all 
    SELECT 'A01', ' 总务部',null union all 
    SELECT 'A0101', ' 人事部',null union all 
    SELECT 'A0102', ' 公关部',null union all 
    SELECT 'A02', ' 制造部 ',null union all   
    SELECT 'A0201', ' 装配一车间',null union all 
    SELECT 'A0202', ' 装配二车间',null union all 
    SELECT 'A03', ' 财务部',null union all 
    SELECT 'A04', ' 销售部',null
    GO
    IF OBJECT_ID('[tbb]') IS NOT NULL
        DROP TABLE [tbb]
    GO
    CREATE TABLE [tbb] (Code nvarchar(50),Cardid nvarchar (50),UserName nvarchar (50),DepartID nvarchar (50) )
    INSERT INTO [tbb]
    SELECT 'HR1001','8198293','AAA','A01' union all 
    SELECT 'SA8005','2052126','BBB','A03'
    GO
    IF OBJECT_ID('[tbc]') IS NOT NULL
        DROP TABLE [tbc]
    GO
    CREATE TABLE [tbc] (EatName char (10),StartTime datetime,EndTime datetime,Price money   )
    INSERT INTO [tbc]
    SELECT '晚餐','17:00:00','23:00:00','12' union all 
    SELECT '午餐','11:00:00','16:00:00','8' union all 
    SELECT '早餐','06:00:00','08:00:00','6'
    GO
    IF OBJECT_ID('[tbd]') IS NOT NULL
        DROP TABLE [tbd]
    GO
    CREATE TABLE [tbd] (EmployeeID varchar (20),CheckDate datetime,CheckTime varchar (8),
    Morning int,AfterNoon int,Evening int,Other int,Price int,MachineID int,AllTime datetime   )
    INSERT INTO [tbd]
    SELECT 'HR1001',' 2010-06-06', '21:21:00', 0, 0 ,1 ,0 ,12, 2, '2010-06-06 21:21:00' union all
    SELECT 'HR1001',' 2010-06-06 ', '07:22:00', 1, 0 ,0, 0, 6 ,2 , '2010-06-06 21:22:00' union all
    SELECT 'SA8005',' 2010-06-06 ', '14:22:00', 0 ,1 ,0 ,0, 8 ,2 , '2010-06-06 21:22:00' union all
    SELECT 'SA8005',' 2010-06-06 ', '7:25:00', 1 ,0 ,0 ,0 ,6 ,2 , '2010-06-06 21:22:00'
    GOselect t1.departid 部门代码,
    t1.departname 部门名称,
    sum(isnull(d.Morning,0)) 早餐次数,
    sum(isnull(case when d.Morning=1 then Price end,0)) 早餐金额,
    sum(isnull(d.AfterNoon,0)) 午餐次数,
    sum(isnull(case when d.AfterNoon=1 then Price end,0)) 午餐金额,
    sum(isnull(d.Evening,0)) 晚餐次数,
    sum(isnull(case when d.Evening=1 then Price end,0)) 晚餐次数,
    sum(isnull(d.Other,0)) 其他餐次数,
    sum(isnull(case when d.Other=1 then Price end,0)) 其他餐金额,
    sum(isnull(Price ,0)) 合计金额
     from tba t1 left join tba t2 on t2.departid like t1.departid+'%' 
    left join tbb b on b. DepartID=t2.DepartID
    left join tbd d on d.EmployeeID=b.Code
    where len(t1.departid)<4
    group by t1.departid,t1.departname
    order by t1.departid
    /*
    部门代码                                                                                                 部门名称                           早餐次数        早餐金额        午餐次数        午餐金额        晚餐次数        晚餐次数        其他餐次数       其他餐金额       合计金额        
    ---------------------------------------------------------------------------------------------------- ------------------------------ ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- 
    A                                                                                                    **公司                           2           12          1           8           1           12          0           0           32
    A01                                                                                                   总务部                           1           6           0           0           1           12          0           0           18
    A02                                                                                                   制造部                           0           0           0           0           0           0           0           0           0
    A03                                                                                                   财务部                           1           6           1           8           0           0           0           0           14
    A04                                                                                                   销售部                           0           0           0           0           0           0           0           0           0(所影响的行数为 5 行)*//*
    求一SQL语句,要求实现的结果是:部门代码 部门名称 早餐次数 早餐金额 午餐次数 午餐金额 晚餐次数 晚餐金额 其他餐次数 其他餐金额 合计金额
    A **公司 2 12 1 8 1 12 0 0 32  
    A01 总务部 1 6 0 0 1 12 0 0 18  
    A02 制造部 1 6 1 8 0 0 0 0 14
    A03 财务部 0 0 0 0 0 0 0 0 0
    .....也就是对各部门和各时段的餐次进行汇总,下级部门要汇总到上级部门中,比如部门代码A0101的数据要汇总到部门代码A01中,而A01中的数据要汇总到A中
    */