各位能人好,小弟一统计查询问题请大家帮忙:以下为数据表:zongfen,要求在sql内查询出结果一,结果二。
100分请求达人,不胜感激,辛苦,谢谢!表zongfen:
daibiaodui  dalei  xiaolei  mingji jifen
---------------------
一班        游泳   女子100     一    4
一班        游泳   女子100     一    4
二班        游泳   女子100     三    2
三班        田径   女子100     一    8
四班        田径   女子100     二    3
一班        田径   女子100     三    2
二班        游泳   男子100     一    6
二班        游泳   男子100     二    4
三班        游泳   男子100     二    3-----------------------------------------
查询结果一:daibiaodui  yi  er  san  jifen
---------------------
一班        2   0    1    10
二班        1   1    1    12
三班        1   1    0    11
四班        0   1    0    3查询结果二:dalei    xiaolei       yi          er       san
-------------------------
游泳     女子100   一班,一班               二班
田径     女子100       三班       四班      一班
游泳     男子100       二班     二班,三班

解决方案 »

  1.   

    查询结果一:select daibiaodui,
    sum(case when mingji = '一' then 1 else 0 end) as yi,
    sum(case when mingji = '二' then 1 else 0 end) as er,
    sum(case when mingji = '三' then 1 else 0 end) as san,
    count(1)
    from zongfen
    group by daibiaodui
      

  2.   

    更正:查询结果一: select daibiaodui, 
    sum(case when mingji = '一' then 1 else 0 end) as yi, 
    sum(case when mingji = '二' then 1 else 0 end) as er, 
    sum(case when mingji = '三' then 1 else 0 end) as san, 
    sum( jifen )  as  jifen 
    from zongfen 
    group by daibiaodui
      

  3.   

    use Tempdb
    go
    --> --> 
     
    declare @zongfen table([daibiaodui] nvarchar(2),[dalei] nvarchar(2),[xiaolei] nvarchar(5),[mingji] nvarchar(1),[jifen] int)
    Insert @zongfen
    select N'一班',N'游泳',N'女子100',N'一',4 union all
    select N'一班',N'游泳',N'女子100',N'一',4 union all
    select N'二班',N'游泳',N'女子100',N'三',2 union all
    select N'三班',N'田径',N'女子100',N'一',8 union all
    select N'四班',N'田径',N'女子100',N'二',3 union all
    select N'一班',N'田径',N'女子100',N'三',2 union all
    select N'二班',N'游泳',N'男子100',N'一',6 union all
    select N'二班',N'游泳',N'男子100',N'二',4 union all
    select N'三班',N'游泳',N'男子100',N'二',3
     
    Select daibiaodui,
    yi=sum(case when mingji=N'一' then 1 else 0 end),
    er=sum(case when mingji=N'二' then 1 else 0 end), 
    san=sum(case when mingji=N'三' then 1 else 0 end),
    jifen=sum(jifen)
    from zongfen
    group by daibiaodui
      

  4.   

    1:
    select daibiaodui, 
    sum(case when mingji = '一' then 1 else 0 end) as yi, 
    sum(case when mingji = '二' then 1 else 0 end) as er, 
    sum(case when mingji = '三' then 1 else 0 end) as san, 
    count(1) as 'jifen'
    from zongfen 
    group by daibiaodui
      

  5.   

    查询结果二,楼主要参考一下这个:
    --******************************************************************
    --                       合并列值 
    --******************************************************************
    表结构,数据如下: 
    id    value 
    ----- ------ 
    1    aa 
    1    bb 
    2    aaa 
    2    bbb 
    2    ccc 需要得到结果: 
    id    values 
    ------ ----------- 
    1      aa,bb 
    2      aaa,bbb,ccc 
    即:group by id, 求 value 的和(字符串相加) 1. 旧的解决方法(在sql server 2000中只能用函数解决。) 
    --===================================================================
    create table tb(id int, value varchar(10)) 
    insert into tb values(1, 'aa') 
    insert into tb values(1, 'bb') 
    insert into tb values(2, 'aaa') 
    insert into tb values(2, 'bbb') 
    insert into tb values(2, 'ccc') 
    go 
    --1. 创建处理函数 
    CREATE FUNCTION dbo.f_strUnite(@id int) 
    RETURNS varchar(8000) 
    AS 
    BEGIN 
        DECLARE @str varchar(8000) 
        SET @str = '' 
        SELECT @str = @str + ',' + value FROM tb WHERE id=@id 
        RETURN STUFF(@str, 1, 1, '') 
    END 
    GO 
    -- 调用函数 
    SELECt id, value = dbo.f_strUnite(id) FROM tb GROUP BY id 
    drop table tb 
    drop function dbo.f_strUnite 
    go
    /* 
    id          value      
    ----------- ----------- 
    1          aa,bb 
    2          aaa,bbb,ccc 
    (所影响的行数为 2 行) 
    */ 
    --===================================================================================
    2. 新的解决方法(在sql server 2005中用OUTER APPLY等解决。) 
    create table tb(id int, value varchar(10)) 
    insert into tb values(1, 'aa') 
    insert into tb values(1, 'bb') 
    insert into tb values(2, 'aaa') 
    insert into tb values(2, 'bbb') 
    insert into tb values(2, 'ccc') 
    go 
    -- 查询处理 
    SELECT * FROM(SELECT DISTINCT id FROM tb)A OUTER APPLY( 
            SELECT [values]= STUFF(REPLACE(REPLACE( 
                ( 
                    SELECT value FROM tb N 
                    WHERE id = A.id 
                    FOR XML AUTO 
                ), ' <N value="', ','), '"/>', ''), 1, 1, '') 
    )N 
    drop table tb /* 
    id          values 
    ----------- ----------- 
    1          aa,bb 
    2          aaa,bbb,ccc (2 行受影响) 
    */ --SQL2005中的方法2 
    create table tb(id int, value varchar(10)) 
    insert into tb values(1, 'aa') 
    insert into tb values(1, 'bb') 
    insert into tb values(2, 'aaa') 
    insert into tb values(2, 'bbb') 
    insert into tb values(2, 'ccc') 
    go select id, [values]=stuff((select ','+[value] from tb t where id=tb.id 
    for xml path('')), 1, 1, '') 
    from tb 
    group by id /* 
    id          values 
    ----------- -------------------- 
    1          aa,bb 
    2          aaa,bbb,ccc (2 row(s) affected) */ drop table tb 
      

  6.   


    ---------------------------------
    --  Author: htl258(Tony)
    --  Date  : 2009-07-21 11:45:04
    ---------------------------------
    --> 生成测试数据表:tbIf not object_id('[tb]') is null
    Drop table [tb]
    Go
    Create table [tb]([daibiaodui] nvarchar(2),[dalei] nvarchar(2),[xiaolei] nvarchar(5),[mingji] nvarchar(1),[jifen] int)
    Insert tb
    Select '一班','游泳','女子100','一',4 union all
    Select '一班','游泳','女子100','一',4 union all
    Select '二班','游泳','女子100','三',2 union all
    Select '三班','田径','女子100','一',8 union all
    Select '四班','田径','女子100','二',3 union all
    Select '一班','田径','女子100','三',2 union all
    Select '二班','游泳','男子100','一',6 union all
    Select '二班','游泳','男子100','二',4 union all
    Select '三班','游泳','男子100','二',3
    Go
    --Select * from tb-->SQL查询如下:
    select [daibiaodui],
        yi = sum(case [mingji] when '一' then [jifen] else 0 end),
    er = sum(case [mingji] when '二' then [jifen] else 0 end),  
    san = sum(case [mingji] when '三' then [jifen] else 0 end),  
    jifen = sum([jifen])
    from tb
    group by [daibiaodui]
    order by charindex([daibiaodui],'一班二班三班四班')
    /*
    daibiaodui yi          er          san         jifen
    ---------- ----------- ----------- ----------- -----------
    一班         8           0           2           10
    二班         6           4           2           12
    三班         8           3           0           11
    四班         0           3           0           3(4 行受影响)
    */一
      

  7.   

    http://topic.csdn.net/u/20090713/16/f675ef76-41da-4ad8-8c33-84fc215ef66a.html这个不是LZ的帖子么?
      

  8.   

    --结果一
    select daibiaodui,
    yi=sum(case when mingji=N'一' then 1 else 0 end),
    er=sum(case when mingji=N'二' then 1 else 0 end),
    san=sum(case when mingji=N'三' then 1 else 0 end),
    jifen=sum(jifen)
    from zongfen
    group by daibiaodui
      

  9.   

    查询结果二: dalei    xiaolei      yi          er      san 
    ------------------------- 
    游泳    女子100  一班,一班              二班 
    田径    女子100      三班      四班      一班 
    游泳    男子100      二班    二班,三班--
    create function f_str(@dalei varchar(20),@xiaolei varchar(20),@mingji varchar(10))
    returns varchar(100)
    as
    begin
        declare @s varchar(100)
        select @s = isnull(@s+',','')+daibiaodui from zongfen
        where dalei = @dalei and xiaolei= @xiaolei and mingji = @mingji
        return @s
    end
    go
    select dalei,xiaolei,dbo.f_str(dalei,xiaolei,'一') as yi,
    dbo.f_str(dalei,xiaolei,'二') as er,
    dbo.f_str(dalei,xiaolei,'三') as san
    from zongfen
    group by  dalei,xiaolei随手输入,你测试一下
      

  10.   

    If not object_id('[tb]') is null
        Drop table [tb]
    Go
    Create table [tb]([daibiaodui] nvarchar(2),[dalei] nvarchar(2),[xiaolei] nvarchar(5),[mingji] nvarchar(1),[jifen] int)
    Insert tb
    Select '一班','游泳','女子100','一',4 union all
    Select '一班','游泳','女子100','一',4 union all
    Select '二班','游泳','女子100','三',2 union all
    Select '三班','田径','女子100','一',8 union all
    Select '四班','田径','女子100','二',3 union all
    Select '一班','田径','女子100','三',2 union all
    Select '二班','游泳','男子100','一',6 union all
    Select '二班','游泳','男子100','二',4 union all
    Select '三班','游泳','男子100','二',3
    Go
    --Select * from tb-->SQL查询如下:
    select [daibiaodui],
        yi = sum(case [mingji] when '一' then 1 else 0 end),
        er = sum(case [mingji] when '二' then 1 else 0 end),  
        san = sum(case [mingji] when '三' then 1 else 0 end),  
        jifen = sum([jifen])
    from tb
    group by [daibiaodui]
    order by charindex([daibiaodui],'一班二班三班四班')(9 行受影响)
    daibiaodui yi          er          san         jifen
    ---------- ----------- ----------- ----------- -----------
    一班         2           0           1           10
    二班         1           1           1           12
    三班         1           1           0           11
    四班         0           1           0           3(4 行受影响)
    第一个
      

  11.   

    use Tempdb
    go
    --> --> 
     
    declare @zongfen table([daibiaodui] nvarchar(2),[dalei] nvarchar(2),[xiaolei] nvarchar(5),[mingji] nvarchar(1),[jifen] int)
    Insert @zongfen
    select N'一班',N'游泳',N'女子100',N'一',4 union all
    select N'一班',N'游泳',N'女子100',N'一',4 union all
    select N'二班',N'游泳',N'女子100',N'三',2 union all
    select N'三班',N'田径',N'女子100',N'一',8 union all
    select N'四班',N'田径',N'女子100',N'二',3 union all
    select N'一班',N'田径',N'女子100',N'三',2 union all
    select N'二班',N'游泳',N'男子100',N'一',6 union all
    select N'二班',N'游泳',N'男子100',N'二',4 union all
    select N'三班',N'游泳',N'男子100',N'二',3
     
    Select 
    [dalei],
    [xiaolei],
    [yi]=isnull(stuff((select ','+[daibiaodui] from @zongfen where [dalei]=a.[dalei] and [xiaolei]=a.[xiaolei] and [mingji]='一' for xml path('')),1,1,''),''),
    [er]=isnull(stuff((select ','+[daibiaodui] from @zongfen where [dalei]=a.[dalei] and [xiaolei]=a.[xiaolei] and [mingji]='二' for xml path('')),1,1,''),''),
    [san]=isnull(stuff((select ','+[daibiaodui] from @zongfen where [dalei]=a.[dalei] and [xiaolei]=a.[xiaolei] and [mingji]='三'for xml path('')),1,1,''),'')
    from @zongfen a
    group by [dalei],[xiaolei]
    dalei xiaolei yi er san
    田径 女子100 三班 四班 一班
    游泳 女子100 一班,一班 二班
    游泳 男子100 二班 二班,三班
      

  12.   


    ---------------------------------
    --  Author: htl258(Tony)
    --  Date  : 2009-07-21 11:45:04
    ---------------------------------
    --> 生成测试数据表:tbIf not object_id('[tb]') is null
    Drop table [tb]
    Go
    Create table [tb]([daibiaodui] nvarchar(2),[dalei] nvarchar(2),[xiaolei] nvarchar(5),[mingji] nvarchar(1),[jifen] int)
    Insert tb
    Select '一班','游泳','女子100','一',4 union all
    Select '一班','游泳','女子100','一',4 union all
    Select '二班','游泳','女子100','三',2 union all
    Select '三班','田径','女子100','一',8 union all
    Select '四班','田径','女子100','二',3 union all
    Select '一班','田径','女子100','三',2 union all
    Select '二班','游泳','男子100','一',6 union all
    Select '二班','游泳','男子100','二',4 union all
    Select '三班','游泳','男子100','二',3
    Go
    --Select * from tb-->SQL查询如下:
    select distinct dalei,xiaolei,
    yi=stuff((select ','+[daibiaodui] from tb where dalei=t.dalei and xiaolei=t.xiaolei and [mingji]='一' for xml path('')),1,1,''),
    er=stuff((select ','+[daibiaodui] from tb where dalei=t.dalei and xiaolei=t.xiaolei and [mingji]='二' for xml path('')),1,1,''),  
    san=stuff((select ','+[daibiaodui] from tb where dalei=t.dalei and xiaolei=t.xiaolei and [mingji]='三' for xml path('')),1,1,'')
    from tb t
     /*
    dalei xiaolei yi er san
    田径 女子100 三班 四班 一班
    游泳 男子100 二班 二班,三班 NULL
    游泳 女子100 一班,一班 NULL 二班
    */二
      

  13.   

    create table zongfen ([daibiaodui] nvarchar(2),[dalei] nvarchar(2),[xiaolei] nvarchar(5),[mingji] nvarchar(1),[jifen] int)
    Insert zongfen
    select N'一班',N'游泳',N'女子100',N'一',4 union all
    select N'一班',N'游泳',N'女子100',N'一',4 union all
    select N'二班',N'游泳',N'女子100',N'三',2 union all
    select N'三班',N'田径',N'女子100',N'一',8 union all
    select N'四班',N'田径',N'女子100',N'二',3 union all
    select N'一班',N'田径',N'女子100',N'三',2 union all
    select N'二班',N'游泳',N'男子100',N'一',6 union all
    select N'二班',N'游泳',N'男子100',N'二',4 union all
    select N'三班',N'游泳',N'男子100',N'二',3
    gocreate function f_strc(@dalei varchar(20),@xiaolei varchar(20),@mingji varchar(10))
    returns varchar(100)
    as
    begin
        declare @s varchar(100)
        select @s = isnull(@s+',','')+daibiaodui from zongfen
        where dalei = @dalei and xiaolei= @xiaolei and mingji = @mingji
        return @s
    end
    go
    select dalei,xiaolei,dbo.f_strc(dalei,xiaolei,'一') as yi,
    dbo.f_strc(dalei,xiaolei,'二') as er,
    dbo.f_strc(dalei,xiaolei,'三') as san
    from zongfen
    group by  dalei,xiaolei
    drop table zongfen
    drop function f_strc/*
    dalei xiaolei yi                                                        er                                  san                                                                                                  
    ----- ------- --------------------------------------- --------------------------  ------------------------------------ 
    田径    女子100   三班                                             四班                         一班
    游泳    男子100   二班                                             二班,三班                             NULL
    游泳    女子100   一班,一班                                        NULL                   二班(所影响的行数为 3 行)
    */
      

  14.   

    create table zongfen ([daibiaodui] nvarchar(2),[dalei] nvarchar(2),[xiaolei] nvarchar(5),[mingji] nvarchar(1),[jifen] int)
    Insert zongfen
    select N'一班',N'游泳',N'女子100',N'一',4 union all
    select N'一班',N'游泳',N'女子100',N'一',4 union all
    select N'二班',N'游泳',N'女子100',N'三',2 union all
    select N'三班',N'田径',N'女子100',N'一',8 union all
    select N'四班',N'田径',N'女子100',N'二',3 union all
    select N'一班',N'田径',N'女子100',N'三',2 union all
    select N'二班',N'游泳',N'男子100',N'一',6 union all
    select N'二班',N'游泳',N'男子100',N'二',4 union all
    select N'三班',N'游泳',N'男子100',N'二',3
    gocreate function f_strc(@dalei varchar(20),@xiaolei varchar(20),@mingji varchar(10))
    returns varchar(100)
    as
    begin
        declare @s varchar(100)
        select @s = isnull(@s+',','')+daibiaodui from zongfen
        where dalei = @dalei and xiaolei= @xiaolei and mingji = @mingji
        return @s
    end
    go
    select dalei,xiaolei,dbo.f_strc(dalei,xiaolei,'一') as yi,
    dbo.f_strc(dalei,xiaolei,'二') as er,
    dbo.f_strc(dalei,xiaolei,'三') as san
    from zongfen
    group by  dalei,xiaolei
      

  15.   


    -------------查询结果一:
    select daibiaodui,sum(decode(mingji,'一',1,0)) as yi,
                      sum(decode(mingji,'二',1,0)) as er, 
                      sum(decode(mingji,'三',1,0)) as san, 
                      sum(jifen)
    from zongfen
    group by  daibiaodui
    ;
    ----------
      

  16.   

    这个应该可以了create function f_getstr(@dalei varchar(20),@xiaolei varchar(20),@mingji varchar(10))
    returns varchar(200)
    as
    begin
    DECLARE @stemp varchar(100)
    DECLARE @sall varchar(200) DECLARE cur_myget CURSOR FOR 
     SELECT daibiaodui  
       FROM zongfen
      WHERE dalei=@dalei and xiaolei=@xiaolei and mingji=@mingji

    OPEN cur_myget

    SET @sall='' FETCH NEXT FROM cur_myget INTO @stemp WHILE @@FETCH_STATUS = 0
    BEGIN
    SET @sall = @sall + ',' + @stemp
    FETCH NEXT FROM cur_myget INTO @stemp
    END CLOSE cur_myget
    DEALLOCATE cur_myget IF (@sall <> '') 
    SET @sall = SUBSTRING (@sall,2,len(@sall) - 1) RETURN @sallend
    go
    select dalei,xiaolei,dbo.f_getstr(dalei,xiaolei,'一') as yi,
           dbo.f_getstr(dalei,xiaolei,'二') as er,dbo.f_getstr(dalei,xiaolei,'三') as san
    from zongfen
    group by  dalei,xiaolei
      

  17.   


    select daibiaodui,
    sum(case when mingji='一' then 1 else 0 end)as yi,
    sum(case when mingji='二' then 1 else 0 end)as er,
    sum(case when mingji='三' then 1 else 0 end)as san,
    sum(jifen) as jifen  from tb group by daibiaodui 
    order by daibiaodui collate Chinese_PRC_Stroke_CS_AS_KS_WS   第一个~~~第二个好难。。看高人。。