表T_Zone_Inf
Level1                                         Level2                                     Level3
-------------------------------------------------- -------------------------------------------------- 安徽省                                                安庆市                                                安庆市
安徽省                                                蚌埠市                                                蚌埠市
安徽省                                                亳州市                                                亳州市
安徽省                                                巢湖市                                                巢湖市
北京市                                                北京市                                                海淀区 
安徽省                                                滁州市                                                定远县 
陕西省                                                商洛市                                                镇安县
需要得到结果:
level1+level2+leve3
安徽省安庆市
安徽省蚌埠市
安徽省亳州市
安徽省巢湖市
北京市海淀区
安徽省滁州市定远县
陕西省商洛市镇安县

解决方案 »

  1.   

      我这个SQL语句是要做到视图里面的,有些函数是不是不能用在视图里面请考虑下。。
      

  2.   

    create table T_Zone_Inf(
    Level1 nvarchar(10),
    Level2 nvarchar(10),
    Level3 nvarchar(10)
    )
    go
    create function myWork(@L1 nvarchar(10),@L2 nvarchar(10),@L3 nvarchar(10))
    returns nvarchar(30)
    as
    begin
    declare @results nvarchar(30)
    if (@L1 = @L2)
    begin
    set @results = @L1 + @L3
    end
    else
    begin
    if (@L2 = @L3)
    begin
    set @results = @L1 + @L2
    end
    else
    begin
    set @results = @L1 + @L2 + @L3
    end
    end
    return @results
    endselect dbo.myWork(Level1,Level2,Level3) from T_Zone_Inf
      

  3.   

    select mm=case when b=c then b else b+c end from table
      

  4.   

    create table T_Zone_Inf(Level1 varchar(10),Level2 varchar(10),Level3 varchar(10))
    insert T_Zone_Inf select '安徽省','安庆市','安庆市' 
    insert T_Zone_Inf select '安徽省','蚌埠市','蚌埠市' 
    insert T_Zone_Inf select '安徽省','亳州市','亳州市'
    insert T_Zone_Inf select '安徽省','巢湖市','巢湖市' 
    insert T_Zone_Inf select '北京市','北京市','海淀区' 
    insert T_Zone_Inf select '安徽省','滁州市','定远县' 
    insert T_Zone_Inf select '陕西省','商洛市','镇安县'
    -----------------------
    select Level1+replace(level2,level1,'')+replace(replace(level3,level2,''),level1,'') from T_Zone_Inf
    ----------------------
    安徽省安庆市 
    安徽省蚌埠市 
    安徽省亳州市 
    安徽省巢湖市 
    北京市海淀区 
    安徽省滁州市定远县 
    陕西省商洛市镇安县
    ---------也可以写个函数调用
      

  5.   

    CREATE TABLE  T_Zone_Inf (Level1 varchar(20),Level2 varchar(20),Level3 varchar(20)) 
    insert into T_Zone_Inf select '安徽省','安庆市','安庆市' 
    union all select '安徽省','蚌埠市','蚌埠市' 
    union all select '安徽省','亳州市','亳州市' 
    union all select '安徽省','巢湖市','巢湖市' 
    union all select '北京市','北京市','海淀区' 
    union all select '安徽省','滁州市','定远县'
    union all select '陕西省','商洛市','镇安县' CREATE VIEW VB_T_Zone_Inf
    ASSELECT ALevel=Level1+
    CASE WHEN Level2=Level3 THEN Level2
         ELSE Level2+Level3
    END
    FROM T_Zone_Inf
    SELECT * FROM VB_T_Zone_Inf
    /*
    ALevel                                                       
    ------------------------------------------------------------ 
    安徽省安庆市
    安徽省蚌埠市
    安徽省亳州市
    安徽省巢湖市
    北京市北京市海淀区
    安徽省滁州市定远县
    陕西省商洛市镇安县(所影响的行数为 7 行)
    */
      

  6.   

    declare @t table(Level1 varchar(100),Level2 varchar(100),Level3 varchar(100))
    insert @t select '安徽省',  '蚌埠市',  '蚌埠市'
    insert @t select '安徽省',  '亳州市',  '亳州市' 
    insert @t select '安徽省',  '巢湖市',  '巢湖市' 
    insert @t select '北京市',  '北京市',  '海淀区' 
    insert @t select '安徽省',  '滁州市',  '定远县' 
    insert @t select '陕西省',  '商洛市',  '镇安县'
    select case when level1=level2 then level1+level3 
                when level2=level3 then level1+level3
                else level1+level2+level3 end 
    from @t
      

  7.   


    你的结果不对 LEVEL1=LEVEL2时 也要判断
      

  8.   


    select case when level1=level2 then level1+level3 
                when level2=level3 then level1+level3 
                else level1+level2+level3 end 
      

  9.   

    --如果没有三个都相等的可以再简化为:
    select (case when level1=level2 or level2=level3 then level1+level3 
            else level1+level2+level3 end) [level1+level2+level3] 
    from T_Zone_Inf 
      

  10.   

    好像level1跟level2 也会有重复的
    CREATE VIEW VB_T_Zone_Inf
    ASSELECT ALevel=
    CASE WHEN level1=level2 THEN level1+level3 
                WHEN level2=level3 THEN level1+level3 
                ELSE level1+level2+level3  
    END
    FROM T_Zone_Inf
      

  11.   


    CREATE  TABLE tt
    (Level1 varchar(100),Level2 varchar(100),Level3 varchar(100)) 
    insert tt select '安徽省',  '蚌埠市',  '蚌埠市' 
    insert tt select '安徽省',  '亳州市',  '亳州市' 
    insert tt select '安徽省',  '巢湖市',  '巢湖市' 
    insert tt select '北京市',  '北京市',  '海淀区' 
    insert tt select '安徽省',  '滁州市',  '定远县' 
    insert tt select '陕西省',  '商洛市',  '镇安县' 
    select  省市区县 =case when level1=level2 then level1+level3 
                           when level2=level3 then level1+level3 
                           else level1+level2+level3 end 
    from tt
    省市区县                                                                                                                                                                                                                                                             
    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
    安徽省蚌埠市
    安徽省亳州市
    安徽省巢湖市
    北京市海淀区
    安徽省滁州市定远县
    陕西省商洛市镇安县(所影响的行数为 6 行)
      

  12.   


    select mm=case when b=c then b else b+c end from table 
      

  13.   

    还有一个条件 解决立马结贴
    假如结果是这样的
    level1           level2     level3
    安徽省             六安市       六安市金安区希望能将level3中的开头=LEVEL2的也去掉,只要从开头判断就行麻烦大家啦!
      

  14.   

    我知道可以用SUBSTRING 先截取LEVEL3的长度为LEVEL2的长度后拿截取的字符串来跟LEVEL2来比较
    但是不会写。。
      

  15.   

    5楼用replace有问题?不是可以替换吗?
      

  16.   

    CREATE  TABLE tt
    (Level1 varchar(100),Level2 varchar(100),Level3 varchar(100)) 
    insert tt select '安徽省',  '蚌埠市',  '蚌埠市' 
    insert tt select '安徽省',  '亳州市',  '亳州市' 
    insert tt select '安徽省',  '巢湖市',  '巢湖市' 
    insert tt select '北京市',  '北京市',  '海淀区' 
    insert tt select '安徽省',  '滁州市',  '定远县' 
    insert tt select '陕西省',  '商洛市',  '镇安县' 
    insert tt select '陕西省',  '商洛市',  '商洛市镇安县' 
    select  省市区县 =case when level1=level2 then level1+level3 
                           when level2=SUBSTRING(level3,1,3) then level1+Level3 
                           else level1+level2+level3 end 
    from tt
    省市区县                                                                                                                                                                                                                                                             
    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
    安徽省蚌埠市
    安徽省亳州市
    安徽省巢湖市
    北京市海淀区
    安徽省滁州市定远县
    陕西省商洛市镇安县
    陕西省商洛市镇安县(所影响的行数为 7 行)
      

  17.   


    declare   @T_Zone_Inf table (Level1 varchar(20),Level2 varchar(20),Level3 varchar(20)) 
    insert into @T_Zone_Inf select '安徽省','安庆市','安庆市' 
    union all select '安徽省','蚌埠市','蚌埠市' 
    union all select '安徽省','亳州市','亳州市' 
    union all select '安徽省','巢湖市','巢湖市' 
    union all select '北京市','北京市','北京市海淀区' 
    union all select '安徽省','滁州市','定远县'
    union all select '陕西省','商洛市','镇安县' 
    union all select '陕西省','陕西省','陕西省' select Level1+replace(level2,level1,'')+replace(replace(level3,level2,''),level1,'') from @T_Zone_Inf 
    /*
    -----------------------------------
    安徽省安庆市
    安徽省蚌埠市
    安徽省亳州市
    安徽省巢湖市
    北京市海淀区
    安徽省滁州市定远县
    陕西省商洛市镇安县
    陕西省(所影响的行数为 8 行)
    */
      

  18.   

    declare @t table(Level1 varchar(100),Level2 varchar(100),Level3 varchar(100)) 
    insert @t select '安徽省',  '蚌埠市',  '蚌埠市' 
    insert @t select '安徽省',  '亳州市',  '亳州市' 
    insert @t select '安徽省',  '巢湖市',  '巢湖市' 
    insert @t select '北京市',  '北京市',  '海淀区' 
    insert @t select '安徽省',  '滁州市',  '定远县' 
    insert @t select '陕西省',  '商洛市',  '镇安县' 
    insert @t select '安徽省',  '六安市',  '六安市金安区'
    select case when level1=level2 then level1+level3 
                when level2=level3 then level1+level3
                when substring(level3,1,len(level2))=level2 and len(level2)<>len(Level3) then level1+level2+ substring(level3,len(level2)+1,len(level3)-len(level2))
                else level1+level2+level3 end 
    from @t安徽省蚌埠市
    安徽省亳州市
    安徽省巢湖市
    北京市海淀区
    安徽省滁州市定远县
    陕西省商洛市镇安县
    安徽省六安市金安区
      

  19.   

    哎 不好意思 又遇到一个情况
    LEVEL1   LEVEL2   LEVEL3 
    北京市     NULL    NULL
    这种情况 level1+level2+level3 =NULL;
    应该= 北京市 
      

  20.   

    哎 不好意思 又遇到一个情况 
    LEVEL1  LEVEL2  LEVEL3 
    北京市    NULL    NULL 
    北京市    NULL    海淀区
    这种情况 level1+level2+level3 =NULL; 
    结果应该是
    北京市
    北京市海淀区
     
      

  21.   

    加个ISNULL 判断下
    declare   @T_Zone_Inf table (Level1 varchar(20),Level2 varchar(20),Level3 varchar(20)) 
    insert into @T_Zone_Inf select '安徽省','安庆市','安庆市' 
    union all select '安徽省','蚌埠市','蚌埠市' 
    union all select '安徽省','亳州市','亳州市' 
    union all select '安徽省','巢湖市','巢湖市' 
    union all select '北京市',null,'北京市海淀区' 
    union all select '安徽省','滁州市','定远县'
    union all select '陕西省','商洛市','镇安县' 
    union all select '陕西省',null,null select 
    isnull(Level1,'')+
    replace(isnull(Level2,''),isnull(Level1,''),'')+
    replace(replace(isnull(Level3,''),isnull(Level2,''),''),isnull(Level1,''),'') 
    from @T_Zone_Inf 
    /*
    -------------------
    安徽省安庆市
    安徽省蚌埠市
    安徽省亳州市
    安徽省巢湖市
    北京市海淀区
    安徽省滁州市定远县
    陕西省商洛市镇安县
    陕西省(所影响的行数为 8 行)*/
      

  22.   


    在他们基础上 isnull(level1,'')+isnull(level2,'')+isnull(level3,'')
      

  23.   

    select isnull(Level1,'')+replace(isnull(Level2,''),isnull(Level1,''),'')+replace(replace(isnull(Level3,''),isnull(Level2,''),''),isnull(Level1,''),'') from T_Zone_Inf
      

  24.   

    declare @t table(Level1 varchar(100),Level2 varchar(100),Level3 varchar(100)) 
    insert @t select '安徽省',  '蚌埠市',  '蚌埠市' 
    insert @t select '安徽省',  '亳州市',  '亳州市' 
    insert @t select '安徽省',  null,  null 
    insert @t select '安徽省',  '巢湖市',  '巢湖市' 
    insert @t select '安徽省',  null,  '蚌埠市' 
    insert @t select '北京市',  '北京市',  '海淀区' 
    insert @t select '安徽省',  '滁州市',  '定远县' 
    insert @t select '陕西省',  '商洛市',  '镇安县' 
    insert @t select '安徽省',  '六安市',  '六安市金安区'
    select case when isnull(level1,'')=isnull(level2,'') then isnull(level1,'')+isnull(level3,'') 
                when isnull(level2,'')=isnull(level3,'') then isnull(level1,'')+isnull(level3,'')
                when substring(isnull(level3,''),1,len(isnull(level2,'')))=isnull(level2,'') and len(isnull(level2,''))<>len(isnull(Level3,'')) then isnull(level1,'')+isnull(level2,'')+ substring(isnull(level3,''),len(isnull(level2,''))+1,len(isnull(level3,''))-len(isnull(level2,'')))
                else level1+level2+level3 end 
    from @t安徽省蚌埠市
    安徽省亳州市
    安徽省
    安徽省巢湖市
    安徽省蚌埠市
    北京市海淀区
    安徽省滁州市定远县
    陕西省商洛市镇安县
    安徽省六安市金安区
      

  25.   


    select isnull(Level1,'')+isnull(replace(level2,level1,''),'')+isnull(replace(replace(level3,level2,''),level1,''),'') from tb 
      

  26.   

    有意思的sql语句哦  没有见过  收藏了哦
      

  27.   

    SQL语句是要做到视图里面的,有些函数是不是不能用在视图里面
      

  28.   

    来参与的人这么多。支持一下,来杯咖啡吧。本店供应印尼原产咖啡豆TETAP SEJATI 、经典磨豆机、精致法压壶,价格优惠并有赠品价,欢迎选购!!
    http://shop36114923.taobao.com/
      

  29.   

    免费视频:
    浪曦ASP.NET企业实战系列 http://down1.langsin.com/001.rar
    浪曦NUnit详解视频 http://down1.langsin.com/002.rar
    浪曦Struts 2应用开发详解 http://www.verycd.com/topics/210454
    VIP视频:
    浪曦Java常见笔试、面试题目深度剖析 http://down1.langsin.com/003.rar
    浪曦J2EE测试实用指南http://down1.langsin.com/005.rar
    浪曦Lucene视频教程 http://down1.langsin.com/006.rar
    浪曦电脑维护项目 http://down1.langsin.com/007.rar
    培训视频:
    浪曦ExtJS视频之Grid控件 http://down1.langsin.com/008.rar
    业务QQ:1050429531
      

  30.   

    CREATE TABLE  T_Zone_Inf (Level1 varchar(20),Level2 varchar(20),Level3 varchar(20)) 
    insert into T_Zone_Inf select '安徽省','安庆市','安庆市' 
    union all select '安徽省','蚌埠市','蚌埠市' 
    union all select '安徽省','亳州市','亳州市' 
    union all select '安徽省','巢湖市','巢湖市' 
    union all select '北京市','北京市','海淀区' 
    union all select '安徽省','滁州市','定远县'
    union all select '陕西省','商洛市','镇安县' CREATE VIEW VB_T_Zone_Inf
    ASSELECT ALevel=Level1+
    CASE WHEN Level2=Level3 THEN Level2
         ELSE Level2+Level3
    END
    FROM T_Zone_Inf
    SELECT * FROM VB_T_Zone_Inf
    /*
    ALevel                                                       
    ------------------------------------------------------------ 
    安徽省安庆市
    安徽省蚌埠市
    安徽省亳州市
    安徽省巢湖市
    北京市北京市海淀区
    安徽省滁州市定远县
    陕西省商洛市镇安县(所影响的行数为 7 行)
    */
      

  31.   

    我也写了  但是五楼的大大好强大  declare  @tab table
    (
    Level1 varchar(10),
    Level2 varchar(10),
    Level3 varchar(10)
    )
    insert @tab select '安徽省','安庆市','安庆市'
    union select '安徽省','蚌埠市','蚌埠市'
    union select '安徽省','亳州市','亳州市'
    union select '安徽省','巢湖市','巢湖市'
    union select '北京市','北京市','海淀区'
    union select '安徽省','滁州市','定远县'
    union select '陕西省','商洛市','镇安县'
    union select '陕西省','商洛市','陕西省'
    --select * from @tab
    select replace(replace(replace(Level1+Level2+Level3,Level1,'')+Level1,Level2,'')+Level2,Level3,'')+Level3  from @tab 
    我的select Level1+replace(level2,level1,'')+replace(replace(level3,level2,''),level1,'') from @tab五楼那位大神的
      

  32.   

    大神  我的原来可以简化select replace(replace(Level1,Level2,'')+Level2,Level3,'')+Level3  from @tab 终于比你的短了
      

  33.   


    USE tempdb
    GOIF EXISTS(SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[TestTable]') AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
    DROP TABLE [dbo].[TestTable]
    GOCREATE TABLE [dbo].[TestTable](
    [field1] [varchar](10) NOT NULL,
    [field2] [varchar](10) NOT NULL,
    [field3] [varchar](10) NOT NULL
    )
    GOINSERT INTO [TestTable]([field1],[field2],[field3]) VALUES ('安徽省','安庆市','安庆市')
    INSERT INTO [TestTable]([field1],[field2],[field3]) VALUES ('安徽省','蚌埠市','蚌埠市')
    INSERT INTO [TestTable]([field1],[field2],[field3]) VALUES ('安徽省','亳州市','亳州市')
    INSERT INTO [TestTable]([field1],[field2],[field3]) VALUES ('安徽省','巢湖市','巢湖市')
    INSERT INTO [TestTable]([field1],[field2],[field3]) VALUES ('北京市','北京市','海淀区')
    INSERT INTO [TestTable]([field1],[field2],[field3]) VALUES ('安徽省','滁州市','定远县')
    INSERT INTO [TestTable]([field1],[field2],[field3]) VALUES ('陕西省','商洛市','镇安县')SELECT * FROM [TestTable]SELECT field1 + ISNULL(CASE WHEN field1 <> field2 THEN field2 END,'') +  ISNULL(CASE WHEN field2 <> field3 THEN field3 END,'') FROM [TestTable]
      

  34.   

    SELECT ALevel=
    CASE 
         when Level1=Level2 and  Level1=Level3 THEN Level1
         when Level1=Level2 and  Level1!=Level3 THEN Level1+Level3
         WHEN Level2=Level3 THEN Level1+Level2
         ELSE Level1+Level2+Level3
    END
    FROM T_Zone_Inf
      

  35.   

    CREATE TABLE T_Zone_Inf (Level1 varchar(20),Level2 varchar(20),Level3 varchar(20))  
    insert into T_Zone_Inf select '安徽省','安庆市','安庆市'  
    union all select '安徽省','蚌埠市','蚌埠市'  
    union all select '安徽省','亳州市','亳州市'  
    union all select '安徽省','巢湖市','巢湖市'  
    union all select '北京市','北京市','海淀区'  
    union all select '安徽省','滁州市','定远县'
    union all select '陕西省','商洛市','镇安县'  SELECT ALevel=
     level1+level2+CASE when charindex(level3,level1+level2)=0 then level3 else '' END
    FROM T_Zone_Inf