sql2000 问题统计表1属性 里b和c 连续出现的次数 谢谢表1名称 属性
李   b  
李   b  
李   b  
李   c  
李   b  
李   b  
李   c  
李   c  
李   b  
李   b  
李   b  
李   b  
李   c  
李   b  
李   c  
李   b  
李   c  
李   c  
李   c  
李   c  
李   b  
李   b  
李   b  
李   b  
李   c
得结果表2
名称 b  c
1连  2次 4次
2连  1次 1次
3连  1次 0次
4连  2次 1次

解决方案 »

  1.   

    select 名称,
    sum(case when 属性='b' then 1 else 0 end) 'b',
    sum(case when 属性='c' then 1 else 0 end) 'c'
    from 表 group by 名称
      

  2.   

    -------------------------------------
    --  Author : liangCK 梁爱兰
    --  Comment: 小梁 爱 兰儿
    --  Date   : 2009-09-28 19:15:33
    -------------------------------------
     
    --> 生成测试数据: @T
    DECLARE @T TABLE (名称 varchar(2),属性 varchar(1))
    INSERT INTO @T
    SELECT '李','b' UNION ALL
    SELECT '李','b' UNION ALL
    SELECT '李','b' UNION ALL
    SELECT '李','c' UNION ALL
    SELECT '李','b' UNION ALL
    SELECT '李','b' UNION ALL
    SELECT '李','c' UNION ALL
    SELECT '李','c' UNION ALL
    SELECT '李','b' UNION ALL
    SELECT '李','b' UNION ALL
    SELECT '李','b' UNION ALL
    SELECT '李','b' UNION ALL
    SELECT '李','c' UNION ALL
    SELECT '李','b' UNION ALL
    SELECT '李','c' UNION ALL
    SELECT '李','b' UNION ALL
    SELECT '李','c' UNION ALL
    SELECT '李','c' UNION ALL
    SELECT '李','c' UNION ALL
    SELECT '李','c' UNION ALL
    SELECT '李','b' UNION ALL
    SELECT '李','b' UNION ALL
    SELECT '李','b' UNION ALL
    SELECT '李','b' UNION ALL
    SELECT '李','c'--SQL查询如下:CREATE TABLE #tb(名称 varchar(2),属性 varchar(1),flag int);
    INSERT #tb(名称,属性) SELECT 名称,属性 FROM @T;DECLARE @名称 varchar(10),@属性 varchar(10);
    DECLARE @i int;
    SET @i = 0UPDATE #tb SET 
        @i = CASE WHEN @名称 = 名称 AND @属性 = 属性 THEN @i ELSE @i+1 END,
        @名称 = 名称,
        @属性 = 属性,
        flag = @i;
        
    SELECT 
        名称 = RTRIM(rowcnt) + N'连',
        SUM(CASE WHEN 属性 = 'b' THEN 1 ELSE 0 END) AS B,
        SUM(CASE WHEN 属性 = 'c' THEN 1 ELSE 0 END) AS C
    FROM (SELECT 名称,属性,COUNT(*) AS rowcnt FROM #tb GROUP BY 名称,属性,flag) AS A
    GROUP BY rowcntDROP TABLE #tb;/*
    名称            B           C
    ------------- ----------- -----------
    1连            2           4
    2连            1           1
    3连            1           0
    4连            2           1(4 行受影响)
    */
      

  3.   


    SQLServer2005DECLARE @T TABLE (名称 VARCHAR(2),属性 VARCHAR(1))
    INSERT INTO @T
    SELECT '李','B' UNION ALL
    SELECT '李','B' UNION ALL
    SELECT '李','B' UNION ALL
    SELECT '李','C' UNION ALL
    SELECT '李','B' UNION ALL
    SELECT '李','B' UNION ALL
    SELECT '李','C' UNION ALL
    SELECT '李','C' UNION ALL
    SELECT '李','B' UNION ALL
    SELECT '李','B' UNION ALL
    SELECT '李','B' UNION ALL
    SELECT '李','B' UNION ALL
    SELECT '李','C' UNION ALL
    SELECT '李','B' UNION ALL
    SELECT '李','C' UNION ALL
    SELECT '李','B' UNION ALL
    SELECT '李','C' UNION ALL
    SELECT '李','C' UNION ALL
    SELECT '李','C' UNION ALL
    SELECT '李','C' UNION ALL
    SELECT '李','B' UNION ALL
    SELECT '李','B' UNION ALL
    SELECT '李','B' UNION ALL
    SELECT '李','B' UNION ALL
    SELECT '李','C';
    WITH T AS
    (SELECT 属性
    ,(ROW_NUMBER() OVER(ORDER BY GETDATE()))IDX1
    FROM @T 
    ),
    T2 AS
    (SELECT 属性
    ,(IDX1-(ROW_NUMBER()OVER(PARTITION BY 属性 ORDER BY IDX1))) IDX
    FROM T
    ),
    T3 AS
    (
    SELECT 属性,COUNT(*) CNT
    FROM T2
    GROUP BY 属性,IDX
    )
    SELECT 
        名称 = RTRIM(CNT) + N'连',
        SUM(CASE WHEN 属性 = 'B' THEN 1 ELSE 0 END) AS B,
        SUM(CASE WHEN 属性 = 'C' THEN 1 ELSE 0 END) AS C
    FROM T3
    GROUP BY CNT名称            B           C
    ------------- ----------- -----------
    1连            2           4
    2连            1           1
    3连            1           0
    4连            2           1(4 行)