有如下表格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 张三 男 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 排列序号
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
/*
有如下表格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
*/
SELECT id=ROW_NUMBER() OVER( ORDER BY class),COUNT(*) [Count],class
FROM A
GROUP BY class
这个partition by完全没必要,纯属多余