朋友提出需求,多个外键组成的字符串,分开显示外键对应的内容。朋友提出需求时一脸懵X相,不知道如何处理,这个一般情况写个程序处理,懒得写,想想数据库可能有希望直接处理了,网上查了一下真有解决方法
数据库方案
外键字符串关联,参考https://bbs.csdn.net/topics/391844126,亲测过,这个方法适合sql server,mysql和sqlite不能用
create table test (ID int , DeptID_S varchar(60))
go
insert into test values
(1, '10017,10011,10003'),
(2, '10012,10011'),
(3, '10017,10011,10024,10022'),
(4, '10011,10024,10009'),
(5, '10011,10003'),
(6, '10009'),
(7, '10012')
go
create table dept(deptid varchar(10) ,deptname varchar(30))
go
insert into dept values
('10017','第一部门'),
('10011','XX部门'),
('10003','VVV部门'),
('10024','BBB'),
('10022','DDD'),
('10009','NNN'),
('10012','GGGGGG')
go
with mt as (
select id , deptid , deptname
from test , dept
where ',' + test.DeptID_S + ',' like '%,' + dept.deptid + ',%'
)
select ID , (select deptname + ',' from mt a where a.ID = mt.ID for xml path('') ) dept_name
from mt
group by ID
go
drop table dept , test
go
分开显示,这个没试(因为朋友那边环境有限,数据库查询这个方法就不再考虑了,看语句感觉应该没问题,贴着,备用)参考https://www.cnblogs.com/huangshuqiang/p/5477385.html
SELECT Address, PARSENAME(REPLACE([Address],'-','.'),4) as 小区名,
--如果字段的内容是 4单元-12幢-203 那么此时小区名字段的信息就是NULL
PARSENAME(REPLACE([Address],'-','.'),3) as 单元号,
PARSENAME(REPLACE([Address],'-','.'),2) as 楼房号,
PARSENAME(REPLACE([Address],'-','.'),1) as 房间号
FROM Person
excle方案
因为朋友那边环境限制,研究了下,用excel解决,用excel分解字段,用VLOOKUP函数关联。参考VLOOKUP函数,两个EXCEL表格之间的数据关联