关于统计sql语句

bluedreams85 2007-12-01 02:52:29
客户资料表:


客户地址 录入时间
江西省高安市蓝坊雷家砖厂 2007-10-15
河南省济源市 2007-10-15
.........................................


现想统计所以各个省份客户总数
统计结果如
江西省有10家客户

河南省有20家客户
/////////////////////
请问一下要怎么实现这种功能了!
...全文
136 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
正牌风哥 2007-12-02
  • 打赏
  • 举报
回复

select
[address]=left([address],charindex('省',[address])),记录=count(1)
from
customer
where
convert(varchar(7),CreateDate,120)='2007-10'--10月,createdate为录入时间
group by left([address],charindex('省',[address]))
linxisheng 2007-12-01
  • 打赏
  • 举报
回复
首先需要一张所有省的表对吧 ,这个可以动态也可以固定
时间算为输入参数,在最后where 语句中加上

给你一个思路

select * from (
[select * from 省表 ] 省表) left outer join [客户表] on [客户表].客户地址 like '%'+[省表].省名+'%'

然后
group by 省表.省名

就出来了 是这个意思吧

这种方法主要解决 group by 组名不固定的情况
bluedreams85 2007-12-01
  • 打赏
  • 举报
回复
刚忘记说一下还有是要统计出月份的
江西省有2007年10月有10家客户

tomyuansir 2007-12-01
  • 打赏
  • 举报
回复

declare @aaa varchar(50)

set @aaa='a省b省'

select substring(@aaa,1,charindex('省',@aaa))
/*

--------------------------------------------------
a省

(所影响的行数为 1 行)

*/
照这个思路做
bluedreams85 2007-12-01
  • 打赏
  • 举报
回复
真的好佩服数据高手啊,
哗哗写出一大串sql语句。
嗯,谢谢。
hbzy123 2007-12-01
  • 打赏
  • 举报
回复

select b.省名+'有' + convert(varchar,count(*))+'家客户'
from
客户资料表 a ,(select substring(客户地址,0,charindex('省',客户地址)) as 省名,客户地址
from 客户资料表
) b
where a.客户地址=b.客户地址
group by b.省名
Limpire 2007-12-01
  • 打赏
  • 举报
回复
/*
如果有这样的数据(没有“省”字):江西南昌……
建表:
*/
create table State (State varchar(20))
insert into State select '江西'
insert into State select '浙江'
....

select a.State,count(*) from State a join 客户资料表 on a.State=left(b.客户地址,len(a.State)) group by a.State
正牌风哥 2007-12-01
  • 打赏
  • 举报
回复
...省...省..省
-------名称为这样时
以第一省为组
显示为...省
正牌风哥 2007-12-01
  • 打赏
  • 举报
回复
只要Address列有 "省"字就可以准确
bluedreams85 2007-12-01
  • 打赏
  • 举报
回复
省份是全国,不只我例子中这两个
正牌风哥 2007-12-01
  • 打赏
  • 举报
回复

select
[显示信息]=[address]+'有'+rtrim(记录)+'家客户 '
from
(select
[address]=left([address],charindex('省',[address])),记录=count(1)
from
customer
group by left([address],charindex('省',[address]))
)Tmp
Limpire 2007-12-01
  • 打赏
  • 举报
回复
--如果都是XX省的数据数据:
select left(客户地址,charindex('省',客户地址)),count(*) from 客户资料表 group by left(客户地址,charindex('省',客户地址))
正牌风哥 2007-12-01
  • 打赏
  • 举报
回复
select
[address]=left([address],charindex('省',[address])),记录=count(1)
from
customer
group by left([address],charindex('省',[address]))
sunhonglei2004 2007-12-01
  • 打赏
  • 举报
回复
这样??

declare @a int
select @a=count(客户地址) from tb where left(客户地址,3)='江西省'
print '江西省有'+@a+'家客户'
tomyuansir 2007-12-01
  • 打赏
  • 举报
回复
select count(1) from tablename group by substring(客户地址,1,charindex('省',客户地址))

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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