表  
       姓名       地址                       患病名称
         1    天津市宁河县芦台镇              艾滋病
         2    天津市塘沽区汉沽                艾滋病
         3    天津市宁河县七里海              艾滋病
         4    天津市宁河县大乡                艾滋病
可不可以得到艾滋病 如下统计表
    
      地区   患病人数
      宁河      3
      塘沽      1
请教下高手 可以用sql得到这结果吗?

解决方案 »

  1.   


    select 地址,SUM(1) as 人数 group by 地址
      

  2.   

    select substring(地址,4,2),count(*) from tb group by substring(地址,4,2)
      

  3.   


    是的。 我也是初学SQL 还没什么思路  不过区县的具体名字都有的 而且就是那么几个而已
    现在比如只有 宁河 七里海 汉沽 三个县 这样有什么办法吗 不知道这样说大家能不能明白
      

  4.   

    ----------------------------------------------------------------
    -- 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 行受影响)
    */
      

  5.   

    用substring截取字符串吧,你的也没什么规律,只能截取两个字符统计,结贴!。
      

  6.   

    谢谢大家!!!特别感谢fredrickhu按照你们的方法我再试一试 
      

  7.   

    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
    )  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
    )