求教SQLserver查询如何把一个字段多次替换

就是把PropertyType替换成物业类型那样,

我现在是这样写的,但是感觉用这么多REPLACE不好,有大神有更好的方法吗?

SELECTREPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(PropertyType,'House','普通住宅'),'BieShu','别墅'),'Apartments','酒店式公寓'),'Shop','商业'),'Office','写字楼'),'Industrialplants','工业厂房'),'Parking','车位'),'Storage','储藏室') AS '物业类型'from BaseBuilding

cinozhu 发布于 2022-2-9 09:40
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共3回答
最佳回答
0
Z4u3z1Lv6专家互助
发布于2022-2-9 10:37(编辑于 2022-2-9 10:37)

with TABLE_A as (

select '1' [id],'1,2' [NAME_]

union all

select '2' [id],'3' [NAME_]

union all

select '3' [id],'4,5' [NAME_]

),

TABLE_B AS

(

select '1' [id],'张三' [NAME_]

union all

select '2' [id],'李四' [NAME_]

union all

select '3' [id],'王五' [NAME_]

union all

select '4' [id],'孙六' [NAME_]

union all

select '5' [id],'赵七' [NAME_]

)

SELECT ID,STRING_AGG(NAME2_,',') FROM (

SELECT T.*,TABLE_B.NAME_ [NAME2_] FROM (

select A.id,A.NAME_

,substring(A.NAME_,b.number,charindex(',',A.NAME_+',',b.number)-b.number) as [序列号] 

from TABLE_A a with(nolock),master..spt_values b with(nolock) 

where b.number>=1 and b.number<=len(a.NAME_) and b.type='P'

and substring(','+A.NAME_,number,1)=','

) T INNER JOIN

TABLE_B ON T.序列号=TABLE_B.id

) T2 GROUP BY ID

image.png

  • cinozhu cinozhu(提问者) 谢谢大佬,我的SQL SERVER版本是2012,HIA不支持STRING_AGG函数,不过给我很大的启发,我知道要怎么搞啦
    2022-02-10 13:39 
最佳回答
0
CD20160914Lv8专家互助
发布于2022-2-9 09:46

虽然是多了点。但是这个也算简单了。在sql server中使用替换效率不错的呀。。不然你还得单独处理分隔再建立一个字典表匹配其实也麻烦。这样看上去函数套得多了。但是不麻烦。改起来容易

最佳回答
0
shirokoLv6资深互助
发布于2022-2-9 09:49

在sql里面做分割合并不太好。

可以不替换,保持英文,到报表内用单元格形态去替换

  • 3关注人数
  • 397浏览人数
  • 最后回答于:2022-2-9 10:37
    请选择关闭问题的原因
    确定 取消
    返回顶部