市县    南北位置  东西位置   [3小时W]海口 北部    东部     rain4red
海口 北部    西部     rain4red
海口 南部    西部     rain4red
白沙    东部     rain3orange
白沙    西部     rain3orange
保亭 北部     rain4red
保亭 南部     rain4red
昌江    东部     rain3orange说明:海口位置分为东北部、西北部、东南部、西南部 
      如果满足四个位置则为 全县 ,否则东北部、西北部 为北部,  东南部、西南部 为南部
      如果南北位置为空,则北部、南部 为全县,如果东西位置为空,东部、西部 为全县想得到结果如果如下:市县    位置            [3小时W]
海口 北部、西南部 rain4red
白沙    全县         rain3orange
保亭    全县            rain4red
昌江    东部            rain3orange

解决方案 »

  1.   

    -- =========================================
    -- -----------t_mac 小编-------------------
       --------------------希望有天成为大虾---- 
    -- =========================================IF OBJECT_ID('tb') IS NOT NULL
    DROP TABLE tb
    GO
    CREATE TABLE tb( 市县 varchar(10),南北位置 varchar(10) ,东西位置  varchar(10) ,[3小时W]  varchar(20))
    go
    insert tb SELECT 
    '海口', '北部'   ,'东部' ,    'rain4red'UNION ALL SELECT 
    '海口', '北部'  , '西部' ,    'rain4red' UNION ALL SELECT 
    '海口','南部'  , '西部'  ,   'rain4red' UNION ALL SELECT 
    '白沙' ,  null,'东部'  ,   'rain3orange' UNION ALL SELECT 
    '白沙' ,  null,'西部'  ,   'rain3orange' UNION ALL SELECT 
    '保亭' ,'北部' ,null  ,  'rain4red'UNION ALL SELECT  
    '保亭','南部'   ,null,  'rain4red' UNION ALL SELECT 
    '昌江' , null, '东部',    'rain3orange' 
    go
     --这个是合并位置的函数(下面要合并位置)
    create FUNCTION dbo.f_tb(@weizhi varchar(100)) 
    RETURNS varchar(8000) 
    AS 
    BEGIN 
        DECLARE @str varchar(8000) 
        SET @str = '' 
        SELECT @str = @str + ',' + 位置 FROM kpo WHERE 市县=@weizhi 
        RETURN STUFF(@str, 1, 1, '') 
    END 
    go
    select 市县,
    位置=case when 南北位置='北部' and 东西位置='东部' then '东北部' 
     when 南北位置='北部' and 东西位置='西部' then '西北部'
    when 南北位置='南部' and 东西位置='西部' then '西南部' 
    when 南北位置='南部' and 东西位置='东部' then '东南部' 
    when 南北位置 is null  then 东西位置
    when 东西位置 is null  then 南北位置
     end,            
    [3小时W] into #
    from tb
    --修改位置的代码
    select 
    distinct 市县,
    位置=case when 位置='东北部' then case when   exists(select * from # where 位置='西北部' and k.市县=市县) then '北部' else '东北部' end   
        when 位置='西北部' then  case when exists(select * from # where 位置='东北部'and k.市县=市县) then '北部' else '西北部' end
        when 位置='西南部' then  case when exists(select * from # where 位置='东南部'and k.市县=市县) then '南部' else '西南部' end
         when 位置='东南部' then  case when exists(select * from # where 位置='西南部'and k.市县=市县) then '南部' else '东南部' end
         when 位置='东部' then  case when exists(select * from # where 位置='西部'and k.市县=市县) then ' 全县' else '东部' end
         when 位置='西部' then  case when exists(select * from # where 位置='东部'and k.市县=市县) then ' 全县' else '西部' end
         when 位置='南部' then  case when exists(select * from # where 位置='北部'and k.市县=市县) then ' 全县' else '南部' end
         when 位置='北部' then  case when exists(select * from # where 位置='南部'and k.市县=市县) then ' 全县' else '北部' end
         end,
         [3小时W] into kpo
         from # k-- 调用函数 合并结果select distinct 
    市县,
    位置=dbo.f_tb(市县),
    [3小时W]
    from kpo  
    /*
    市县         位置                                                                                                                                                                                                                                                               3小时W
    ---------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------
    白沙          全县                                                                                                                                                                                                                                                              rain3orange
    保亭          全县                                                                                                                                                                                                                                                              rain4red
    昌江         东部                                                                                                                                                                                                                                                               rain3orange
    海口         北部,西南部                                                                                                                                                                                                                                                           rain4red*/
    go