当前位置: 首页 > 面试题库 >

表规范化(将逗号分隔的字段解析为单个记录)

樊胜
2023-03-14
问题内容

我有一个这样的表:

设备

DeviceId   Parts

1          Part1, Part2, Part3
2          Part2, Part3, Part4
3          Part1

我想创建一个表“零件”,将数据从“零件”列导出到新表。之后,我将放置“零件”列

预期结果

部分

PartId PartName

  1      Part1
  2      Part2
  3      Part3
  4      Part4

设备部分

DeviceId PartId

  1      1
  1      2
  1      3
  2      2
  2      3
  2      4
  3      1

我可以在SQL Server 2008中执行此操作而不使用游标吗?


问题答案:

- 设置:

declare @Device table(DeviceId int primary key, Parts varchar(1000))
declare @Part table(PartId int identity(1,1) primary key, PartName varchar(100))
declare @DevicePart table(DeviceId int, PartId int)

insert @Device
values
    (1, 'Part1, Part2, Part3'),
    (2, 'Part2, Part3, Part4'),
    (3, 'Part1')

- 脚本:

declare @DevicePartTemp table(DeviceId int, PartName varchar(100))

insert @DevicePartTemp
select DeviceId, ltrim(x.value('.', 'varchar(100)'))
from
(
    select DeviceId, cast('<x>' + replace(Parts, ',', '</x><x>') + '</x>' as xml) XmlColumn
    from @Device
)tt
cross apply
    XmlColumn.nodes('x') as Nodes(x)


insert @Part
select distinct PartName
from @DevicePartTemp

insert @DevicePart
select tmp.DeviceId, prt.PartId
from @DevicePartTemp tmp 
    join @Part prt on
        prt.PartName = tmp.PartName

- 结果:

select *
from @Part

PartId      PartName
----------- ---------
1           Part1
2           Part2
3           Part3
4           Part4


select *
from @DevicePart

DeviceId    PartId
----------- -----------
1           1
1           2
1           3
2           2
2           3
2           4
3           1


 类似资料:
  • 问题内容: 如何在Python中将字符串(一百万)解析为整数? 问题答案: a = ‘1,000,000’ >>> int(a.replace(‘,’, ‘’)) 1000000 >>>

  • 问题内容: 我需要能够像这样的字符串: 变成: 我有种感觉(有#python的提示),该解决方案将涉及shlex模块。 问题答案: shlex模块解决方案允许转义的引号,一个引号的转义和所有花哨的东西外壳程序支持。 转义引号示例:

  • 问题内容: 这个问题已经在这里有了答案 : 7年前关闭。 可能重复: mysql是多列数组 我有两个表: 帖子表 Gallery中的值是Images表中的主键: 图片表 我之所以这样做,而不仅仅是在Images表中添加PostID键,是因为这些图像可以与许多不同的帖子相关联。我想我可以为关系添加另一个表,但是就我要添加到其中的jQuery脚本而言,逗号分隔的值更易于使用。 如果我在需要与PostI

  • 问题内容: 这是当前结果,可以每天更改 我需要帮助的是在下面实现此结果。 问题答案: 使用:

  • 问题内容: 我有一个字符串,我正在尝试将其解析为一个数字。我尝试使用,结果为2。我猜逗号是问题所在,但我将如何以正确的方式解决此问题?只需删除逗号? 问题答案: 是的,删除逗号:

  • 我找到了以下用于匹配逗号分隔的数字或数字范围的regex: