表
姓名 地址 患病名称
1 天津市宁河县芦台镇 艾滋病
2 天津市塘沽区汉沽 艾滋病
3 天津市宁河县七里海 艾滋病
4 天津市宁河县大乡 艾滋病
可不可以得到艾滋病 如下统计表
地区 患病人数
宁河 3
塘沽 1
请教下高手 可以用sql得到这结果吗?
姓名 地址 患病名称
1 天津市宁河县芦台镇 艾滋病
2 天津市塘沽区汉沽 艾滋病
3 天津市宁河县七里海 艾滋病
4 天津市宁河县大乡 艾滋病
可不可以得到艾滋病 如下统计表
地区 患病人数
宁河 3
塘沽 1
请教下高手 可以用sql得到这结果吗?
select 地址,SUM(1) as 人数 group by 地址
是的。 我也是初学SQL 还没什么思路 不过区县的具体名字都有的 而且就是那么几个而已
现在比如只有 宁河 七里海 汉沽 三个县 这样有什么办法吗 不知道这样说大家能不能明白
-- Author :fredrickhu(小F,向高手学习)
-- Date :2011-08-20 22:44:03
-- Verstion:
-- Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86)
-- Jul 9 2008 14:43:34
-- Copyright (c) 1988-2008 Microsoft Corporation
-- Enterprise Evaluation Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 3)
--
----------------------------------------------------------------
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([姓名] int,[地址] varchar(18),[患病名称] varchar(6))
insert [tb]
select 1,'天津市宁河县芦台镇','艾滋病' union all
select 2,'天津市塘沽区汉沽','艾滋病' union all
select 3,'天津市宁河县七里海','艾滋病' union all
select 4,'天津市宁河县大乡','艾滋病'
--------------开始查询--------------------------
select
SUBSTRING(地址,CHARINDEX('市',地址)+1,CHARINDEX('县',地址)-CHARINDEX('市',地址)-1) as 地区,COUNT(1) as 患病人数
from
tb
where
CHARINDEX('县',地址)>0
group by
SUBSTRING(地址,CHARINDEX('市',地址)+1,CHARINDEX('县',地址)-CHARINDEX('市',地址)-1)
union all
select
SUBSTRING(地址,CHARINDEX('市',地址)+1,CHARINDEX('区',地址)-CHARINDEX('市',地址)-1) as 地区,COUNT(1) as 患病人数
from
tb
where
CHARINDEX('区',地址)>0
group by
SUBSTRING(地址,CHARINDEX('市',地址)+1,CHARINDEX('区',地址)-CHARINDEX('市',地址)-1)
----------------结果----------------------------
/* 地区 患病人数
------------------ -----------
宁河 3
塘沽 1(2 行受影响)
*/
case CHARINDEX(N'市',地址) when 0 then 0
else CHARINDEX(N'市',地址)+1 end
,
case CHARINDEX(N'县',地址)
when 0
then LEN(地址)+1-
case CHARINDEX(N'市',地址) when 0 then 0
else CHARINDEX(N'市',地址)+1 end
else
CHARINDEX(N'县',地址)-
case CHARINDEX(N'市',地址) when 0 then 0
else CHARINDEX(N'市',地址)+1 end
end
) as 地区,SUM(1) from 表
group by
select SUBSTRING(地址,
case CHARINDEX(N'市',地址) when 0 then 0
else CHARINDEX(N'市',地址)+1 end
,case CHARINDEX(N'县',地址)
when 0
then LEN(地址)+1-
case CHARINDEX(N'市',地址) when 0 then 0
else CHARINDEX(N'市',地址)+1 end
else
CHARINDEX(N'县',地址)-
case CHARINDEX(N'市',地址) when 0 then 0
else CHARINDEX(N'市',地址)+1 end
end
)