具体表如下:
ID        业务名         动作类型       操作者         时间
 1        游戏           增加           PPP          2007-01-01
 2        游戏      删除           UUU          2007-01-02
 3        体育           增加           PPP          2007-02-02
 4        娱乐           删除           PPP          2007-02-03
 5        体育           删除           PPP          2007-02-09
 6        体育           删除           TTT          2007-03-03
 7        跑步           增加           SSS          2007-03-20
 8        运动           删除           AAA          2007-05-20
 ......说明:这是一个动作记录表,记录了业务名为XX被删除或者增加的动作事件
写SQL语句:
1,把所有的业务按增加次数从大到小给排列出来,并且给出这个业务的删除次数
如下所示:
序号       业务名       增加次数       删除次数
 1        游戏         2118         1250
 2        体育         1935         1322
 4        运动         1850         1222
 5        娱乐         1771         1752
 ......2,把所有的业务按动作类型的次数从大到小给排列出来,这个动作次数包括增加和删除
序号        业务名      动作次数
 1         游戏        3842
 2         娱乐        3502
 3         体育        3122
 4         运动        3001
 ......
各位高手帮帮忙,我写了2天了也没把SQL语句写出来。

解决方案 »

  1.   

    select 业务名,
              增加次数=sum(case when 动作类型='增加' then 1 else 0 end),
              删除次数=sum(case when 动作类型='删除' then 1 else 0 end)
        into #
    from tb
    group 业务名select id=identity(int,1,1),* 
    from #
    order by 增加次数 desc,删除次数 desc
      

  2.   

    select 业务名,count(*) 动作次数 into #
    from tb 
    group by 业务名select id=identity(int,1,1),*
    from #
    order by 动作次数 desc
      

  3.   

    select 业务名,
              增加次数=sum(case when 动作类型='增加' then 1 else 0 end),
              删除次数=sum(case when 动作类型='删除' then 1 else 0 end)
        into #1
    from tb
    group 业务名select id=identity(int,1,1),*  into #2
    from #
    order by 增加次数 desc,删除次数 descselect * from #2--2select 业务名,count(*) 动作次数 into #3
    from tb 
    group by 业务名select id=identity(int,1,1),* into #4
    from #
    order by 动作次数 descselect * from #4
      

  4.   

    create table tb(ID int, 业务名 varchar(10), 动作类型 varchar(10), 操作者 varchar(10), 时间 varchar(10))
    insert into tb values(1, '游戏', '增加', 'PPP', '2007-01-01') 
    insert into tb values(2, '游戏', '删除', 'UUU', '2007-01-02') 
    insert into tb values(3, '体育', '增加', 'PPP', '2007-02-02') 
    insert into tb values(4, '娱乐', '删除', 'PPP', '2007-02-03') 
    insert into tb values(5, '体育', '删除', 'PPP', '2007-02-09') 
    insert into tb values(6, '体育', '删除', 'TTT', '2007-03-03') 
    insert into tb values(7, '跑步', '增加', 'SSS', '2007-03-20') 
    insert into tb values(8, '运动', '删除', 'AAA', '2007-05-20') 
    goselect 业务名,
      sum(case 动作类型 when '增加' then 1 else 0 end) '增加次数',
      sum(case 动作类型 when '删除' then 1 else 0 end) '删除次数'
    from tb
    group by 业务名
    order by 增加次数 desc
    /*
    业务名        增加次数        删除次数
    ---------- ----------- -----------
    跑步         1           0
    体育         1           2
    游戏         1           1
    娱乐         0           1
    运动         0           1(5 行受影响)
    */select 业务名, 动作次数 = count(*) from tb group by 业务名 order by 动作次数 desc
    /*
    业务名        动作次数
    ---------- -----------
    体育         3
    游戏         2
    娱乐         1
    运动         1
    跑步         1(5 行受影响)
    */drop table tb
      

  5.   

    --1
    select 业务名,
              增加次数=sum(case when 动作类型='增加' then 1 else 0 end),
              删除次数=sum(case when 动作类型='删除' then 1 else 0 end)
    from tb group by 业务名
    order by sum(case when 动作类型='增加' then 1 else 0 end) desc
    --2
    select 业务名,动作次数=count(1)
    from tb group by 业务名
    order by count(1) desc
      

  6.   


    1、
    select id=identity(int,1,1),业务名,增加次数=sum(case when 动作类型='增加' then 1 else 0 end),删除次数=sum(case when 动作类型='删除' then 1 else 0 end) into #temp from 表 group by 业务名 select * from #temp order by 增加次数 desc2、
    select id=identity(int,1,1),业务名,count(*) 动作次数 into #temp  from 表 group by 业务名select * from #temp order by 动作次数 desc
      

  7.   


    1、
    select id=identity(int,1,1),业务名,增加次数=sum(case when 动作类型='增加' then 1 else 0 end),删除次数=sum(case when 动作类型='删除' then 1 else 0 end) into #temp from 表 group by 业务名 order by 增加次数 descselect * from #temp 2、
    select id=identity(int,1,1),业务名,count(*) 动作次数 into #temp1  from 表 group by 业务名 order by 动作次数 descselect * from #temp1 
      

  8.   

    create table tb(ID int, 业务名 varchar(10), 动作类型 varchar(10), 操作者 varchar(10), 时间 varchar(10))
    insert into tb values(1, '游戏', '增加', 'PPP', '2007-01-01') 
    insert into tb values(2, '游戏', '删除', 'UUU', '2007-01-02') 
    insert into tb values(3, '体育', '增加', 'PPP', '2007-02-02') 
    insert into tb values(4, '娱乐', '删除', 'PPP', '2007-02-03') 
    insert into tb values(5, '体育', '删除', 'PPP', '2007-02-09') 
    insert into tb values(6, '体育', '删除', 'TTT', '2007-03-03') 
    insert into tb values(7, '跑步', '增加', 'SSS', '2007-03-20') 
    insert into tb values(8, '运动', '删除', 'AAA', '2007-05-20') 
    go
     
    --1
    select 业务名,
              增加次数=sum(case when 动作类型='增加' then 1 else 0 end),
              删除次数=sum(case when 动作类型='删除' then 1 else 0 end)
    from tb group by 业务名
    order by 增加次数 desc
    --2
    select 业务名,动作次数=count(1)
    from tb group by 业务名
    order by 动作次数 descdrop table tb/*
    业务名        增加次数        删除次数
    ---------- ----------- -----------
    跑步         1           0
    体育         1           2
    游戏         1           1
    娱乐         0           1
    运动         0           1(5 row(s) affected)业务名        动作次数
    ---------- -----------
    体育         3
    游戏         2
    娱乐         1
    运动         1
    跑步         1(5 row(s) affected)
    */
      

  9.   

    --sql server 2000的写法.
    create table tb(ID int, 业务名 varchar(10), 动作类型 varchar(10), 操作者 varchar(10), 时间 varchar(10))
    insert into tb values(1, '游戏', '增加', 'PPP', '2007-01-01') 
    insert into tb values(2, '游戏', '删除', 'UUU', '2007-01-02') 
    insert into tb values(3, '体育', '增加', 'PPP', '2007-02-02') 
    insert into tb values(4, '娱乐', '删除', 'PPP', '2007-02-03') 
    insert into tb values(5, '体育', '删除', 'PPP', '2007-02-09') 
    insert into tb values(6, '体育', '删除', 'TTT', '2007-03-03') 
    insert into tb values(7, '跑步', '增加', 'SSS', '2007-03-20') 
    insert into tb values(8, '运动', '删除', 'AAA', '2007-05-20') 
    go
    SELECT 序号 =(SELECT COUNT(增加次数) FROM 
    (
      select 业务名,
        sum(case 动作类型 when '增加' then 1 else 0 end) '增加次数',
        sum(case 动作类型 when '删除' then 1 else 0 end) '删除次数'
      from tb
      group by 业务名
    ) t
    where 增加次数 > m.增加次数) + 1 , * from
    (
      select 业务名,
        sum(case 动作类型 when '增加' then 1 else 0 end) '增加次数',
        sum(case 动作类型 when '删除' then 1 else 0 end) '删除次数'
      from tb
      group by 业务名
    ) m
    order by 序号/*
    序号          业务名        增加次数        删除次数
    ----------- ---------- ----------- -----------
    1           跑步         1           0
    1           体育         1           2
    1           游戏         1           1
    4           娱乐         0           1
    4           运动         0           1(5 行受影响)
    */
    SELECT 序号 =(SELECT COUNT(动作次数) FROM 
    (
      select 业务名, 动作次数 = count(*) from tb group by 业务名
    ) t 
    where 动作次数 > m.动作次数) + 1 , * from
    (
      select 业务名, 动作次数 = count(*) from tb group by 业务名
    ) m 
    order by 序号/*
    序号          业务名        动作次数
    ----------- ---------- -----------
    1           体育         3
    2           游戏         2
    3           娱乐         1
    3           运动         1
    3           跑步         1(5 行受影响)
    */drop table tb
      

  10.   

    --sql server 2005用row_number解决序号问题.
    create table tb(ID int, 业务名 varchar(10), 动作类型 varchar(10), 操作者 varchar(10), 时间 varchar(10))
    insert into tb values(1, '游戏', '增加', 'PPP', '2007-01-01') 
    insert into tb values(2, '游戏', '删除', 'UUU', '2007-01-02') 
    insert into tb values(3, '体育', '增加', 'PPP', '2007-02-02') 
    insert into tb values(4, '娱乐', '删除', 'PPP', '2007-02-03') 
    insert into tb values(5, '体育', '删除', 'PPP', '2007-02-09') 
    insert into tb values(6, '体育', '删除', 'TTT', '2007-03-03') 
    insert into tb values(7, '跑步', '增加', 'SSS', '2007-03-20') 
    insert into tb values(8, '运动', '删除', 'AAA', '2007-05-20') 
    go
    SELECT 序号 = row_number() over(order by 增加次数 desc) , * FROM 
    (
      select 业务名,
        sum(case 动作类型 when '增加' then 1 else 0 end) '增加次数',
        sum(case 动作类型 when '删除' then 1 else 0 end) '删除次数'
      from tb
      group by 业务名
    ) t
    order by 序号/*
    序号                   业务名        增加次数        删除次数
    -------------------- ---------- ----------- -----------
    1                    跑步         1           0
    2                    体育         1           2
    3                    游戏         1           1
    4                    娱乐         0           1
    5                    运动         0           1(5 行受影响)
    */
    SELECT 序号 = row_number() over(order by 动作次数 desc) , * FROM 
    (
      select 业务名, 动作次数 = count(*) from tb group by 业务名
    ) t 
    order by 序号/*
    序号                   业务名        动作次数
    -------------------- ---------- -----------
    1                    体育         3
    2                    游戏         2
    3                    娱乐         1
    4                    运动         1
    5                    跑步         1(5 行受影响)
    */drop table tb
      

  11.   

    declare @tb table (id int,yewu varchar(20),dongzuo varchar(20),caozuo varchar(20),shijian datetime)
    insert into @tb select 1,'游戏','增加','ppp','2007-01-01'
    insert into @tb select 2,'游戏','删除','uuu','2007-01-02'
    insert into @tb select 3,'体育','增加','ppp','2007-02-02'
    insert into @tb select 4,'娱乐','删除','ppp','2007-02-03'
    insert into @tb select 5,'体育','删除','ppp','2007-02-09'
    insert into @tb select 6,'体育','删除','ttt','2007-03-03'
    insert into @tb select 7,'跑步','增加','sss','2007-03-20'
    insert into @tb select 8,'运动','删除','aaa','2007-05-20'select id=identity(int,1,1),* into # from (
    select yewu,
    sum(case when dongzuo='增加' then 1 else 0 end) as [增加次数],
    sum(case when dongzuo='删除' then 1 else 0 end) as [删除次数]
    from @tb a group by yewu)aselect * from #id yewu 增加次数 删除次数
    1 跑步 1 0
    2 体育 1 2
    3 游戏 1 1
    4 娱乐 0 1
    5 运动 0 1