select a.username,sum(case when b.operator='user1' then 1 else 0 end) as operator,sum(case when b.checker='user2' then 1 else 0 end) as checker from user a left join operate b on a.username=b.username group by a.username

解决方案 »

  1.   

    select username,operator=(select count(*) from operate where operator=a.username),checker=(select count(*) from operate where checker=a.username) from user
      

  2.   

    select username,operator=(select count(*) from operate where operator=a.username),checker=(select count(*) from operate where checker=a.username) from user a
      

  3.   

    wanyingsong(豌豆) :误会了!,我的表中不只有这几条数据,还有很多,只列了2条而已,因此“when b.operator='user1' then 1 else 0 end”这样的 不行
      

  4.   

    select 
    isnull (a.username,b.username) as username,
    isnull (a.operator,0) as operator,
    isnull (b.checker,0) as checker
    from 
    (select a.userid ,count(b.operator) as operator 
    from user a,operate b 
    where a.username=b.username
    group by a.userid
    )a full join
    (
    select a.userid ,count(b.checker) as checker
    from user a,operate b 
    where a.username=b.username
    group by a.userid
    count(case when  then 1 else 0 end)) b 
    on a.username=b.username
      

  5.   

    --上面写错了,下面是测试:
    create table #user(
    userid int identity(1,1),
    username varchar(10)
    )
    create table #operate(
    [id] int identity(1,1),
    operator varchar(10),
    checker varchar(10)
    )
    insert into #user select 'user1'
    insert into #user select 'user2'insert into #operate select 'user1','user2'
    insert into #operate select 'user2','user1'
    insert into #operate select 'user1','user1'--select * from #user
    select a.username,b.num as operator,c.num as checker from #user a 
    left join (select operator,count(*) num from #operate group by operator) b on a.username=b.operator
    left join (select checker,count(*) num from #operate group by checker) c on a.username=c.checker
    drop table #user
    drop table #operate
      

  6.   

    declare @user table(userid int,username varchar(10))
    insert into @user select                        
            
      1  ,   'user1'  union all select    
          
      2  ,   'user2'          

    declare @operate table(id int,operator varchar(10),checker varchar(10))
    insert into @operate select  1 ,    'user1', 'user2' union all select
     2  ,    'user2',   'user1'   union all select
     3  ,     'user1' ,   'user1'   
    select a.username,
    (select count(*) from @operate where operator=a.username) as Operator,
    (select count(*) from @operate where operator=a.username) as checker
    from @user a
    --测试结果
    username   Operator    checker     
    ---------- ----------- ----------- 
    user1      2           2
    user2      1           1(2 row(s) affected)
      

  7.   

    发错了:
    select 
    isnull (a.username,b.username) as username,
    isnull (a.operator,0) as operator,
    isnull (b.checker,0) as checker
    from 
    (select a.userid ,count(b.operator) as operator 
    from user a,operate b 
    where a.username=b.username
    group by a.userid
    )a full join
    (
    select a.userid ,count(b.checker) as checker
    from user a,operate b 
    where a.username=b.username
    group by a.userid) bon a.username=b.username
      

  8.   

    AntingZ(夕惕若):谢谢了,果然是高手。
      

  9.   

    上面写错了一列名declare @user table(userid int,username varchar(10))
    insert into @user select                        
            
      1  ,   'user1'  union all select    
          
      2  ,   'user2'          

    declare @operate table(id int,operator varchar(10),checker varchar(10))
    insert into @operate select  1 ,    'user1', 'user2' union all select
     2  ,    'user2',   'user1'   union all select
     3  ,     'user1' ,   'user1'   
    select a.username,
    (select count(*) from @operate where operator=a.username) as Operator,
    (select count(*) from @operate where checker=a.username) as checker
    from @user a
    --测试结果
    username   Operator    checker     
    ---------- ----------- ----------- 
    user1      2           2
    user2      1           1(2 row(s) affected)
      

  10.   

    --回楼主的话,用我现在的方法,不管有多少数据都可以了,看测试:
    create table #user(
    userid int identity(1,1),
    username varchar(10)
    )
    create table #operate(
    [id] int identity(1,1),
    operator varchar(10),
    checker varchar(10)
    )
    insert into #user select 'user1'
    insert into #user select 'user2'
    insert into #user select 'user3'
    insert into #user select 'user4'
    insert into #user select 'user5'insert into #operate select 'user1','user2'
    insert into #operate select 'user2','user1'
    insert into #operate select 'user1','user3'
    insert into #operate select 'user1','user1'
    insert into #operate select 'user2','user2'
    insert into #operate select 'user3','user1'
    insert into #operate select 'user4','user4'
    insert into #operate select 'user3','user3'
    insert into #operate select 'user4','user2'--select * from #user
    select a.username,b.num as operator,c.num as checker from #user a 
    left join (select operator,count(*) num from #operate group by operator) b on a.username=b.operator
    left join (select checker,count(*) num from #operate group by checker) c on a.username=c.checker
    drop table #user
    drop table #operate
    /*结果是
    username   operator    checker     
    ---------- ----------- ----------- 
    user1      3           3
    user2      2           3
    user3      2           2
    user4      2           1
    user5      NULL        NULL
    */
      

  11.   

    select a.username
    ,operator=isnull(b.operator,0)
    ,checker=isnull(c.checker,0)
    from [user] a
    left join(
    select username,operator=count(*) 
    from operate
    group by username
    )b on a.username=b.username
    left join(
    select username,checker=count(*) 
    from operate
    group by username
    )c on a.username=c.username
      

  12.   

    --写错字段名了,改一下:
    select a.username
    ,operator=isnull(b.operator,0)
    ,checker=isnull(c.checker,0)
    from [user] a
    left join(
    select username=operator,operator=count(*) 
    from operate
    group by operator
    )b on a.username=b.username
    left join(
    select username=checker,checker=count(*) 
    from operate
    group by checker
    )c on a.username=c.username
      

  13.   

    select A.username,isnull(B.opertator,0)opertator,isnull(C.checker,0) checker 
    from [user] A
          LEFT JOIN (select operator username,sum(1) opertator from operate group by operator) B 
                  ON A.username=B.username
               LEFT JOIN (select checker  username,sum(1) checker from operate group by checker ) C
                  ON A.username=C.username
      

  14.   

    CREATE TABLE #t ([id] [int] IDENTITY, username varchar(20), operator int, checker int)
    Insert #t(Username) select operator from operate group by operator 
    Insert #t(username) select checker from operate 
    where operate not in (select username from #t) group by checker
    declare @max int, @Min int, @o int, @Username varchar(20)
    select @max = Max(id), @min = min(id) from #t
    while @min <= @max
    begin
      Select @Username = Username From #t where id = @min   
      select @o = count(operator) From operate Where operator = @Username
      update #t set operator = @o where id = @min
      Select @o = count(checker) From operate  Where checker = @Username
      update #t set operator = @o where id = @min
      set @min = @min + 1
    end
      

  15.   

    --测试数据
    create table #user(
    userid int identity(1,1),
    username varchar(10)
    )
    create table #operate(
    [id] int identity(1,1),
    operator varchar(10),
    checker varchar(10)
    )
    insert into #user select 'user1'
    insert into #user select 'user2'
    insert into #user select 'user3'
    insert into #user select 'user4'
    insert into #user select 'user5'insert into #operate select 'user1','user2'
    insert into #operate select 'user2','user1'
    insert into #operate select 'user1','user3'
    insert into #operate select 'user1','user1'
    insert into #operate select 'user2','user2'
    insert into #operate select 'user3','user1'
    insert into #operate select 'user4','user4'
    insert into #operate select 'user3','user3'
    insert into #operate select 'user4','user2'--查询
    select a.username
    ,operator=isnull(b.operator,0)
    ,checker=isnull(c.checker,0)
    from #user a
    left join(
    select username=operator,operator=count(*) 
    from #operate
    group by operator
    )b on a.username=b.username
    left join(
    select username=checker,checker=count(*) 
    from #operate
    group by checker
    )c on a.username=c.username
    go--删除测试
    drop table #user,#operate/*--测试结果username   operator    checker     
    ---------- ----------- ----------- 
    user1      3           3
    user2      2           3
    user3      2           2
    user4      2           1
    user5      0           0(所影响的行数为 5 行)
    --*/
      

  16.   

    CREATE TABLE #t ([id] [int] IDENTITY, username varchar(20), operator int, checker int)
    Insert #t(Username) select operator from operate group by operator 
    Insert #t(username) select checker from operate 
    where operate not in (select username from #t) group by checker
    declare @max int, @Min int, @o int, @Username varchar(20)
    select @max = Max(id), @min = min(id) from #t
    while @min <= @max
    begin
      Select @Username = Username From #t where id = @min   
      select @o = count(operator) From operate Where operator = @Username
      update #t set operator = @o where id = @min
      Select @o = count(checker) From operate  Where checker = @Username
      update #t set checker= @o where id = @min
      set @min = @min + 1
    endSelect * From #t
    drop table #t
      

  17.   

    晕,怎么和老邹想到一块了如果perate表的字段数量是不确定的,比如除了operator |   checker,还有其他字段,老邹看看怎么弄?
      

  18.   

    CREATE TABLE #t ([id] [int] IDENTITY, username varchar(20), operator int, checker int)
    Insert #t(Username) select operator from operate group by operator 
    Insert #t(username) select checker from operate 
    where checker not in (select username from #t) group by checker
    declare @max int, @Min int, @o int, @Username varchar(20)
    select @max = Max(id), @min = min(id) from #t
    while @min <= @max
    begin
      Select @Username = Username From #t where id = @min   
      select @o = count(operator) From operate Where operator = @Username
      update #t set operator = @o where id = @min
      Select @o = count(checker) From operate  Where checker = @Username
      update #t set checker= @o where id = @min
      set @min = @min + 1
    endSelect * From #t
    drop table #t老是写错。