有如下表格Aid      name     sex      class
1       张三      男           1
2      李四      女            2
3     ...          ...               3
4      .....      ....               1
5     .....         ...               2
6     ....          .....             4欲 生产下面统计表格
id        count    class
1             2         1
2             2         2
3             1         3
4             1         4SQL 语句应如何写呢?关键是要生成id 排列序号

解决方案 »

  1.   


    WITH a0 (id,name,sex,class) AS
    (
    SELECT 1,'张三','男',1 UNION ALL
    SELECT 2,'李四','女',2 UNION ALL
    SELECT 3,'...','...,',3 UNION ALL
    SELECT 4,'.....','....',1 UNION ALL
    SELECT 5,'.....','...,',2 UNION ALL
    SELECT 6,'....','.....,',4
    )
    ,a1 as
    (
    SELECT COUNT(*) COUNT,class
    FROM a0
    GROUP BY class
    )
    SELECT ROW_NUMBER() OVER(ORDER BY class) id,*
    FROM a1
      

  2.   


    /*
    有如下表格Aid      name     sex      class
    1       张三      男           1
    2      李四      女            2
    3     ...          ...               3
    4      .....      ....               1
    5     .....         ...               2
    6     ....          .....             4欲 生产下面统计表格
    id        count    class
    1             2         1
    2             2         2
    3             1         3
    4             1         4SQL 语句应如何写呢?关键是要生成id 排列序号
    */--测试环境
    DECLARE @t TABLE(id INT,name1 VARCHAR(10),sex CHAR(2),class INT)
    INSERT INTO @t
            ( id, name1, sex, class )
    VALUES  ( 
    1,   '张三',      '男',           1)
    ,(2,      '李四'      ,'女'            ,2)
    ,(3,     '...' ,         '女'               ,3)
    ,(4 ,     '.....',      '女'               ,1)
    ,(5 ,    '.....' ,     '女'             ,2)
    ,(6 ,    '.... ' ,      '女'            ,4)--查询
    SELECT id=ROW_NUMBER() OVER(PARTITION BY GETDATE() ORDER BY class),COUNT(*) [Count],class
    FROM @t
    GROUP BY class--结果
    /*
    id Count class
    1 2 1
    2 2 2
    3 1 3
    4 1 4
    */
      

  3.   

    --稍改下楼上的
    SELECT id=ROW_NUMBER() OVER( ORDER BY class),COUNT(*) [Count],class
    FROM A
    GROUP BY class
      

  4.   


    这个partition by完全没必要,纯属多余
      

  5.   

    sql2005开始有 ROW_NUMBER
      

  6.   

    先统计总和,然后根据class 进行分组ROW_NUMBER() OVER(ORDER BY class)