Sql 基于另一个表中的数据更新一个表中的列
我有两张桌子: 暖通空调设置Sql 基于另一个表中的数据更新一个表中的列,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有两张桌子: 暖通空调设置 ID (int) SuiteType (varchar(50)) Suite (varchar(1000)) 和套房 ID (int) SuiteNumber (varchar(10)) SuiteType (varchar(50)) Hvac\u设置中的示例数据表: ID | SuiteType (description) | SuiteNumbers 1 | Helmodul A suite A | 103A,104A (separated
ID (int)
SuiteType (varchar(50))
Suite (varchar(1000))
和套房
ID (int)
SuiteNumber (varchar(10))
SuiteType (varchar(50))
Hvac\u设置中的示例数据
表:
ID | SuiteType (description) | SuiteNumbers
1 | Helmodul A suite A | 103A,104A (separated by comma, nn suites)
2 | Helmodul A suite A m/hems| 316A,412A,503A,504A,505B,509A,510A
3 | Helmodul A suite A m/sov | 217A
我希望编写一个SQL查询,用Hwac\u Setup
表中匹配的suitembers
中正确的SuiteType
数据更新SuiteType
表中的SuiteType
列
更新后套件
表格的样本数据
ID | SuiteNumber | SuiteType
---+----------------+---------------------------
1 | 103A | Helmodul A suite A
2 | 104A | Helmodul A suite A
3 | 316A | Helmodul A suite A m/hems
..
..
n | 217A | Helmodul A suite A m/sov
有人能帮我解释一下语法吗?试试这个:
set nocount on
if object_id ('tempdb..#Hvac_Setup') is not null drop table #Hvac_Setup
create table #Hvac_Setup
(
ID int,
SuiteType varchar(50),
SuiteNumbers varchar(1000)
)
if object_id ('tempdb..#Suites') is not null drop table #Suites
create table #Suites
(
ID int,
SuiteNumber varchar(10),
SuiteType varchar(50)
)
insert #Hvac_Setup values
(1, 'Helmodul A suite A', '103A,104A'),
(2, 'Helmodul A suite A m/hems', '316A,412A,503A,504A,505B,509A,510A'),
(3, 'Helmodul A suite A m/sov', '217A')
select * from #Hvac_Setup
insert #Suites values
(1,'103A', 'Helmodul A suite A'),
(2,'104A', 'Helmodul A suite A'),
(3,'316A', 'Helmodul A suite A m/hems')
select * from #Suites
update #Suites
set SuiteType = hs.SuiteType
from #Suites s
inner join #Hvac_Setup as hs
on hs.SuiteNumbers like '%'+ s.SuiteNumber +'%'
select * from #Suites
顺便说一句:你应该试着用一种前后一致的方式来写你的问题(表中的Suite或SuiteNumbers?)。你需要一个字符串拆分器。我个人的选择来自Jeff Moden和sql server central的社区。这里还有其他一些很好的选择。最大的问题是您的数据没有标准化。存储分隔数据违反1NF,并会造成令人难以置信的痛苦。sql server的版本是什么。2016有一个内置的功能,否则你将不得不建立自己的ie上面的评论我。