22,207
社区成员
发帖
与我相关
我的任务
分享
现有数据,利用分组统计各个地区或各个乡镇的人数
ID a b stu
1 地区1 乡镇11 学生1
2 地区2 乡镇21 学生2
3 地区1 乡镇12 学生3
4 地区2 乡镇22 学生4
5 地区1 乡镇13 学生5
6 地区2 乡镇21 学生6
7 地区1 乡镇11 学生7
8 地区2 乡镇23 学生8
9 地区1 乡镇12 学生9
10 地区2 乡镇22 学生10
数据库版本是sql2005
SELECT DISTINCT a,COUNT(STU) OVER(PARTITION BY a) AS TotalMan FROM TempDBa
SELECT DISTINCT b,COUNT(STU) OVER(PARTITION BY b) AS TotalMan FROM TempDBa
通过这两个语句可以完成,但是我现在想写一个通用的方法只需要传递参数就可以进行分组,这个如何做?
我的思路是
DECLARE @v varchar(100)
set @v='a' --就是在这里获取不同的值,查询的结果分组也不同
SELECT DISTINCT @v,COUNT(STU) OVER(PARTITION BY @v) AS TotalMan FROM TempDBa
我写的这个当然无法实现,请问有好的办法么
采用exec好像可以实现但是想这个查询的结果写到一个
DECLARE @Table TABLE里面就整不出了
select a, count(stu) from TempDBa group by a
--> 数据库版本:
--> Microsoft SQL Server 2008 (RTM) - 10.0.1600.22
--> 测试数据:TempDBa
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'TempDBa')
AND type in (N'U')) --U 代表你查询的是表
DROP TABLE TempDBa
GO
---->建表
create table TempDBa([ID] int,[a] varchar(5),[b] varchar(6),[STU] varchar(6))
insert TempDBa
select 1,'地区1','乡镇11','学生1' union all
select 2,'地区2','乡镇21','学生2' union all
select 3,'地区1','乡镇12','学生3' union all
select 4,'地区2','乡镇22','学生4' union all
select 5,'地区1','乡镇13','学生5' union all
select 6,'地区2','乡镇21','学生6' union all
select 7,'地区1','乡镇11','学生7' union all
select 8,'地区2','乡镇23','学生8' union all
select 9,'地区1','乡镇12','学生9' union all
select 10,'地区2','乡镇22','学生10'
GO
--> 查询结果
DECLARE @Table TABLE([ID] varchar(100) ,TotalMan int)
DECLARE @v varchar(100)
set @v='a' --就是在这里获取不同的值,查询的结果分组也不同
insert into @Table
SELECT DISTINCT @v,COUNT(STU) OVER(PARTITION BY @v) AS TotalMan FROM TempDBa
select * from @Table
--> 删除表格
--DROP TABLE TempDBa