求教:截取特定字符串并实现分类统计

suixufeng112 2011-12-28 02:32:27
表customer中有一个列cst_hometown,里面存储的是客户的籍贯,例如“山东省济南市。。。。。。”

现在我统计数据库中不同省份的人数。如:

province number
山东省 1200
浙江省 500
陕西省 1000


以此类推,目前紧急需要的是统计不同省份人数,如果可以统计一个省里不同市的人数那更好了,求高手指教。

PS:我只写出来截取省份的语句select substring(cst_hometown,0,charindex('省',cst_hometown)+1) as province from customer)
...全文
114 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
suixufeng112 2011-12-28
  • 打赏
  • 举报
回复
用户选择某个省份,然后统计出下属的不同城市人数。比如用户选择了“山东省”,那山东省下的各个市人数怎样统计出来?[Quote=引用 5 楼 kuqideyupian 的回复:]
SQL code
--按省市统计,未测试
SELECT LEFT(cst_hometown,CHARINDEX('省',cst_hometown)) AS PROVINCE
,LEFT(STUFF(cst_hometown,1,CHARINDEX('省',cst_hometown),''),CHARINDEX('市',STUFF(cst_hometown,1,CHARINDEX('省',cs……
[/Quote]
勿勿 2011-12-28
  • 打赏
  • 举报
回复
if object_id('[customer]') is not null drop table [customer]
go
create table customer(cst_hometown varchar(50),number int)
insert into customer values('广东省深圳市罗湖区',10000)
insert into customer values('广东省深圳市福田区',20000)
insert into customer values('广东省深圳市宝安区',30000)
insert into customer values('广东省广州市天河区',20000)
insert into customer values('湖南省长沙市河西区',3000)
insert into customer values('湖南省株洲市河A区',7000)
insert into customer values('湖南省常德市河B区',3000)
insert into customer values('湖南省衡阳市河珠晖区',21000)


select SUBSTRING(cst_hometown,0,CHARINDEX('省',cst_hometown)+1) as province ,sum(number)from customer group by
SUBSTRING(cst_hometown,0,CHARINDEX('省',cst_hometown)+1)


province
-------------------------------------------------- -----------
广东省 80000
湖南省 34000

(2 行受影响)


suixufeng112 2011-12-28
  • 打赏
  • 举报
回复
目前只把不同省份的统计出来的,精确到统计某个市人数,还没有写出来[Quote=引用 13 楼 qianjin036a 的回复:]
引用 11 楼 kuqideyupian 的回复:

引用 9 楼 suixufeng112 的回复:

谢谢!省份人数统计出来了。但是有点看不懂,可否麻烦简单讲解一下?引用 2 楼 kuqideyupian 的回复:
SQL code
--按省统计
SELECT LEFT(cst_hometown,CHARINDEX('省',cst_hometown)) AS PROVINCE,C……
[/Quote]
-晴天 2011-12-28
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 kuqideyupian 的回复:]

引用 9 楼 suixufeng112 的回复:

谢谢!省份人数统计出来了。但是有点看不懂,可否麻烦简单讲解一下?引用 2 楼 kuqideyupian 的回复:
SQL code
--按省统计
SELECT LEFT(cst_hometown,CHARINDEX('省',cst_hometown)) AS PROVINCE,COUNT(1) AS NUMBER
FROM CUST……
[/Quote]

如果这个人是北京市的,或者"新疆维吾尔自治区"的,统计了吗?
-晴天 2011-12-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 qianjin036a 的回复:]

OH,是求和:
SQL code
create t2(city nvarchar(20))
insert into t2 select '北京市'
insert into t2 select '河北省'
....

select a.city,sum(b.number)
from t2 a inner join customer b on charindex(a.city,b.cst_hom……
[/Quote]

统计人数,如果一行一人,还是count.
_0筱筱0_ 2011-12-28
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 suixufeng112 的回复:]

谢谢!省份人数统计出来了。但是有点看不懂,可否麻烦简单讲解一下?引用 2 楼 kuqideyupian 的回复:
SQL code
--按省统计
SELECT LEFT(cst_hometown,CHARINDEX('省',cst_hometown)) AS PROVINCE,COUNT(1) AS NUMBER
FROM CUSTOMER
WHERE cst_hometown LIK……
[/Quote]
只统计cst_hometown里有“省”的记录,按从开头到“省”的字符串分组统计条数
-晴天 2011-12-28
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 suixufeng112 的回复:]

谢谢!省份人数统计出来了。但是有点看不懂,可否麻烦简单讲解一下?引用 2 楼 kuqideyupian 的回复:
SQL code
--按省统计
SELECT LEFT(cst_hometown,CHARINDEX('省',cst_hometown)) AS PROVINCE,COUNT(1) AS NUMBER
FROM CUSTOMER
WHERE cst_hometown LIK……
[/Quote]

这样统计的结果是不对并没有根据不同的省,直辖市,自治区来进行统计,而只是对含有"省"这个字符的行进行统计,这是你要的结果吗?
suixufeng112 2011-12-28
  • 打赏
  • 举报
回复
谢谢!省份人数统计出来了。但是有点看不懂,可否麻烦简单讲解一下?[Quote=引用 2 楼 kuqideyupian 的回复:]
SQL code
--按省统计
SELECT LEFT(cst_hometown,CHARINDEX('省',cst_hometown)) AS PROVINCE,COUNT(1) AS NUMBER
FROM CUSTOMER
WHERE cst_hometown LIKE '%省%'
GROUP BY LEFT(cst_hometown,CHARINDEX('省',cst_homet……
[/Quote]
-晴天 2011-12-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 suixufeng112 的回复:]

各个省和各个市都是数据表中已经登记过的。引用 4 楼 qianjin036a 的回复:
省的数目是有限的,建议楼主建一个省/市/自治区表,然后用这个表与你的表连接进行统计查询.

SQL code
create t2(city nvarchar(20))
insert into t2 select '北京市'
insert into t2 select '河北省'
....

……
[/Quote]

那就直接用这个表来处理好啦!
suixufeng112 2011-12-28
  • 打赏
  • 举报
回复
各个省和各个市都是数据表中已经登记过的。[Quote=引用 4 楼 qianjin036a 的回复:]
省的数目是有限的,建议楼主建一个省/市/自治区表,然后用这个表与你的表连接进行统计查询.

SQL code
create t2(city nvarchar(20))
insert into t2 select '北京市'
insert into t2 select '河北省'
....

select a.city,count(*)
from t2 a inner join c……
[/Quote]
-晴天 2011-12-28
  • 打赏
  • 举报
回复
OH,是求和:
create t2(city nvarchar(20))
insert into t2 select '北京市'
insert into t2 select '河北省'
....

select a.city,sum(b.number)
from t2 a inner join customer b on charindex(a.city,b.cst_hometown)>0
group by a.city


如果要进一步求市的,那可以再在t2 中加入市的列,然后用这两个列进行分组统计,条件要改一下.
_0筱筱0_ 2011-12-28
  • 打赏
  • 举报
回复
--按省市统计,未测试
SELECT LEFT(cst_hometown,CHARINDEX('省',cst_hometown)) AS PROVINCE
,LEFT(STUFF(cst_hometown,1,CHARINDEX('省',cst_hometown),''),CHARINDEX('市',STUFF(cst_hometown,1,CHARINDEX('省',cst_hometown),''))) AS CITY
,COUNT(1) AS NUMBER
FROM CUSTOMER
WHERE cst_hometown LIKE '%省%市%'
GROUP BY LEFT(cst_hometown,CHARINDEX('省',cst_hometown)),LEFT(STUFF(cst_hometown,1,CHARINDEX('省',cst_hometown),''),CHARINDEX('市',STUFF(cst_hometown,1,CHARINDEX('省',cst_hometown),'')))
-晴天 2011-12-28
  • 打赏
  • 举报
回复
省的数目是有限的,建议楼主建一个省/市/自治区表,然后用这个表与你的表连接进行统计查询.
create t2(city nvarchar(20))
insert into t2 select '北京市'
insert into t2 select '河北省'
....

select a.city,count(*)
from t2 a inner join customer b on charindex(a.city,b.cst_hometown)>0
group by a.city

勿勿 2011-12-28
  • 打赏
  • 举报
回复
拿点具体的数据来说话可能比较好点
_0筱筱0_ 2011-12-28
  • 打赏
  • 举报
回复
--按省统计
SELECT LEFT(cst_hometown,CHARINDEX('省',cst_hometown)) AS PROVINCE,COUNT(1) AS NUMBER
FROM CUSTOMER
WHERE cst_hometown LIKE '%省%'
GROUP BY LEFT(cst_hometown,CHARINDEX('省',cst_hometown))
--小F-- 2011-12-28
  • 打赏
  • 举报
回复
select
substring(cst_hometown,0,charindex('省',cst_hometown)+1) as province from customer),
sum(number) as number
from
tb
group by
substring(cst_hometown,0,charindex('省',cst_hometown)+1) as province from customer)

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧