ID | 编码 |
---|---|
1 | 93&94 |
2 | 93 |
3 | 93&94&95 |
编码 | 内容 |
---|---|
93 | 其他包装 |
94 | 纸箱 |
95 | 泡沫 |
有以上两个表,其中表1的编码如果有多个是以&来区分两个编码,表1和表2可以通过编码相关联。请问如何通过SQL得到以下的结果集(SQL server数据库):
ID | 编码 | 内容 |
---|---|---|
1 | 93&94 | 其他包装/纸箱 |
2 | 93 | 纸箱 |
3 | 93&94&95 | 其他包装/纸箱/泡沫 |
ID | 编码 |
---|---|
1 | 93&94 |
2 | 93 |
3 | 93&94&95 |
编码 | 内容 |
---|---|
93 | 其他包装 |
94 | 纸箱 |
95 | 泡沫 |
有以上两个表,其中表1的编码如果有多个是以&来区分两个编码,表1和表2可以通过编码相关联。请问如何通过SQL得到以下的结果集(SQL server数据库):
ID | 编码 | 内容 |
---|---|---|
1 | 93&94 | 其他包装/纸箱 |
2 | 93 | 纸箱 |
3 | 93&94&95 | 其他包装/纸箱/泡沫 |
该回答引用自GPT-3.5,由博主GISer Liu编写:
根据问题描述,你需要在 SQL Server 数据库中处理两个表的数据,并按照指定格式关联输出结果。解决这个问题可以分为以下几个步骤:
SELECT ID, value AS Code
FROM Table1
CROSS APPLY STRING_SPLIT(Code, '&')
这段代码会将表1中的编码字段按照 "&" 符号进行拆分,每个拆分后的编码对应一行记录。SELECT t1.ID, t2.Content
FROM (
SELECT ID, value AS Code
FROM Table1
CROSS APPLY STRING_SPLIT(Code, '&')
) t1
LEFT JOIN Table2 t2 ON t1.Code = t2.Code
这段代码将拆分后的编码与表2进行左连接,以获取对应的内容。SELECT ID,
STUFF((
SELECT '/' + ISNULL(t2.Content, '')
FROM (
SELECT ID, value AS Code
FROM Table1
CROSS APPLY STRING_SPLIT(Code, '&')
) t1
LEFT JOIN Table2 t2 ON t1.Code = t2.Code
WHERE t1.ID = t.ID
FOR XML PATH('')
), 1, 1, '') AS MergedContent
FROM Table1 t
GROUP BY ID
这段代码使用 STUFF
函数和 FOR XML PATH('')
将每个 ID 对应的内容合并成指定格式的字符串。Table1
和 Table2
如果该回答解决了您的问题,请采纳!如果没有,请参考以下方案进行修订