表T_Zone_Inf
Level1 Level2 Level3
-------------------------------------------------- -------------------------------------------------- 安徽省 安庆市 安庆市
安徽省 蚌埠市 蚌埠市
安徽省 亳州市 亳州市
安徽省 巢湖市 巢湖市
北京市 北京市 海淀区
安徽省 滁州市 定远县
陕西省 商洛市 镇安县
需要得到结果:
level1+level2+leve3
安徽省安庆市
安徽省蚌埠市
安徽省亳州市
安徽省巢湖市
北京市海淀区
安徽省滁州市定远县
陕西省商洛市镇安县
Level1 Level2 Level3
-------------------------------------------------- -------------------------------------------------- 安徽省 安庆市 安庆市
安徽省 蚌埠市 蚌埠市
安徽省 亳州市 亳州市
安徽省 巢湖市 巢湖市
北京市 北京市 海淀区
安徽省 滁州市 定远县
陕西省 商洛市 镇安县
需要得到结果:
level1+level2+leve3
安徽省安庆市
安徽省蚌埠市
安徽省亳州市
安徽省巢湖市
北京市海淀区
安徽省滁州市定远县
陕西省商洛市镇安县
解决方案 »
- 如declare @dbname varchar(50) set @dbname='dbname', 请问C#中如何使用变量@dbname。
- 如何可以实现这个SQL查询
- 高手请指教sql语句中一变量的处理
- 菜鸟求教一触发器
- 超菜问题:sql server中怎样写组合的逻辑表达式??
- SQL CASE返回值问题
- SQL Server does not exist or access denied 问题
- 重复执行SQL问题.
- 请问SQL SERVER中有ORACLE中ROWID或ROWNUM这样的函数吗,如果没有用什么方法来代替???
- 很急:一个小问题
- 关于用户对产品评价(评分)的数据表设计,及加权计算某产品的得分
- PowerDesigner 设计视图里面怎样设置唯一性约束?
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
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
----------------------
安徽省安庆市
安徽省蚌埠市
安徽省亳州市
安徽省巢湖市
北京市海淀区
安徽省滁州市定远县
陕西省商洛市镇安县
---------也可以写个函数调用
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 行)
*/
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
你的结果不对 LEVEL1=LEVEL2时 也要判断
select case when level1=level2 then level1+level3
when level2=level3 then level1+level3
else level1+level2+level3 end
select (case when level1=level2 or level2=level3 then level1+level3
else level1+level2+level3 end) [level1+level2+level3]
from T_Zone_Inf
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
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 行)
select mm=case when b=c then b else b+c end from table
假如结果是这样的
level1 level2 level3
安徽省 六安市 六安市金安区希望能将level3中的开头=LEVEL2的也去掉,只要从开头判断就行麻烦大家啦!
但是不会写。。
(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 行)
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 行)
*/
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安徽省蚌埠市
安徽省亳州市
安徽省巢湖市
北京市海淀区
安徽省滁州市定远县
陕西省商洛市镇安县
安徽省六安市金安区
LEVEL1 LEVEL2 LEVEL3
北京市 NULL NULL
这种情况 level1+level2+level3 =NULL;
应该= 北京市
LEVEL1 LEVEL2 LEVEL3
北京市 NULL NULL
北京市 NULL 海淀区
这种情况 level1+level2+level3 =NULL;
结果应该是
北京市
北京市海淀区
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 行)*/
在他们基础上 isnull(level1,'')+isnull(level2,'')+isnull(level3,'')
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安徽省蚌埠市
安徽省亳州市
安徽省
安徽省巢湖市
安徽省蚌埠市
北京市海淀区
安徽省滁州市定远县
陕西省商洛市镇安县
安徽省六安市金安区
select isnull(Level1,'')+isnull(replace(level2,level1,''),'')+isnull(replace(replace(level3,level2,''),level1,''),'') from tb
http://shop36114923.taobao.com/
浪曦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
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 行)
*/
(
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五楼那位大神的
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]
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
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