本帖最后由 waCtr 于 2012-12-07 16:17:56 编辑

解决方案 »

  1.   

    现在已统计出  张三 2012年12月份完成的动作次数select su.UName,ine.utime,ine.item, idt.ItemName
    from table1 as su left join table2 as ine on su.Ubz=ine.Ubz
    left join ItemDate as idt on ine.ItemName=idt.ItemBz
    where su.UName='张三' and ine.ItemTime between '2012-12-01' and '2012-12-30'  结果如下
    UName       utime        item    ItemName
    张三       2012-12-01    3        搬箱子
    上三       2012-12-01    7        搬电脑完成次数不知道怎么弄了??
      

  2.   

    看了一下,觉得楼主给的数据有点问题。还有后面3张表的关系也貌似木怎么看懂??
    问题一:
    table2  需要完成动作次数表(item为次数,utime为需要完成次数的时间月份)
    usid   item     utime           itemID
    001     3      2012-12-01    101
    002     2      2012-12-01    102
    101     7      2012-12-01    104
    这里的101因该是001吧
    问题二:
    tableA  完成动作表(A)--inptime为完成时间,--did为数据ID
    did         inptime
    1            2012-12-01
    2            2012-11-03
    3            2012-12-03
    tableB  完成动作表(B)--RName 为人名
    did          RName 
    1             张三
    1             李四
    2             张三
    3             张三
    3             李四
    tableC  完成动作表(C)--itemName动作名称
    did        itemName
    1           搬箱子
    1           搬椅子
    2           搬椅子
    3           搬箱子
    3           搬椅子 我猜其实这3张表是想表达这么个意思对么?(如果是,你上面的3张表这样设计感觉有问题的。)
    张三  搬箱子  2012-12-01
    李四  搬椅子  2012-12-01
    张三  搬椅子  2012-11-03
    张三  搬箱子  2012-12-03
    李四  搬椅子  2012-12-03 
      

  3.   


    -------------------应该完成部分----------------
    --创建表table1
    if OBJECT_ID('table1','u') is not null
    drop table table1
    create table table1
    (
    UName nvarchar(20),
    Usid nvarchar(20)
    )
    go
    insert into table1
    select '张三','001' union all
    select '李四','002'--创建表table2
    if OBJECT_ID('table2','u') is not null
    drop table table2
    create table table2
    (
    usid nvarchar(20),
    item int,
    utime Date,
    itemID nvarchar(20)
    )
    go
    insert into table2
    select '001',3,'2012-12-01','101' union all
    select '002',2,'2012-12-01','102' union all
    select '001',7,'2012-12-01','104'
     
    --创建表table3
    if OBJECT_ID('table3','u') is not null
    drop table table3
    create table table3
    (
    itemID nvarchar(20),
    itemName nvarchar(20),
    )
    go
    insert into table3
    select '101','搬箱子' union all
    select '102','搬椅子' union all
    select '103','搬桌子' union all
    select '104','搬电脑'
    -------------------实际完成部分----------------
    --创建表TableA
    if OBJECT_ID('TableA','u') is not null
    drop table TableA
    create table TableA
    (
    did int,
    inptime date
    )
    go
    insert into TableA
    select 1,'2012-12-01' union all
    select 2,'2012-11-03' union all
    select 3,'2012-12-03'
    --创建表TableB
    if OBJECT_ID('TableB','u') is not null
    drop table TableB
    create table TableB
    (
    did int,
    RName  nvarchar(20)
    )
    go
    insert into TableB
    select 1,'张三' union all
    select 1,'李四' union all
    select 2,'张三' union all
    select 3,'张三' union all
    select 3,'李四'
     --创建表TableC
    if OBJECT_ID('TableC','u') is not null
    drop table TableC
    create table TableC
    (
    did int,
    itemName  nvarchar(20)
    )
    go
    insert into TableC
    select 1,'搬箱子' union all
    select 1,'搬椅子' union all
    select 2,'搬椅子' union all
    select 3,'搬箱子' union all
    select 3,'搬椅子'select *From TableA
    select *From TableB
    select *From TableC
    -------------------SQL部分------------------
    --查询每个人应该完成动作次数
    select T1.UName,T3.itemName,T2.item from table1 T1
    inner join table2 T2 on T1.Usid = T2.usid
    inner join table3 T3 on T2.itemID =T3.itemID--查询每个人最终完成的次数
    select B.RName,C.itemName,count(itemName) 完成次数 from TableA A 
    inner join TableB B on A.did =B.did
    inner join TableC C on A.did=C.did
    group by b.RName,C.itemName--最终SQL
    select A.UName,A.itemName,A.item 需要完成动作次数,isnull(b.完成次数,0) 完成次数  from 
    (select T1.UName,T3.itemName,T2.item from table1 T1
    inner join table2 T2 on T1.Usid = T2.usid
    inner join table3 T3 on T2.itemID =T3.itemID) A left join(select B.RName,C.itemName,count(itemName) 完成次数 from TableA A 
    inner join TableB B on A.did =B.did
    inner join TableC C on A.did=C.did
    group by b.RName,C.itemName) B on A.UName =B.RName and A.itemName=B.itemName where A.UName='张三'--结果集
    --张三 搬箱子 3 2
    --张三 搬电脑 7 0
      

  4.   

    --查询每个人最终完成的次数
    select B.RName,C.itemName,count(itemName) 完成次数 from TableA A inner join TableB B on A.did =B.didinner join TableC C on A.did=C.didgroup by b.RName,C.itemName
    这段代码  在我这边运行 怎么把张三 搬箱子  统计成了4次??
      

  5.   


    --查询每个人最终完成的次数
    select B.RName,C.itemName,count(itemName) 完成次数 from TableA A 
    inner join TableB B on A.did =B.did
    inner join TableC C on A.did=C.did
    group by b.RName,C.itemName--执行结果
    --李四 搬箱子 2
    --张三 搬箱子 2
    --李四 搬椅子 2
    --张三 搬椅子 3
      

  6.   

    select a.name,sum(b.money),sum(c.out_money) from customer as a inner join in_money as b 
    on a.customer.num=b.num inner join outmoney as c 
    on b.bill_no=c.bill_num
    group by a.name
    为什么我这样最后得到结果有一个sum值是错误的