gpt4 book ai didi

SQL:将一行分成多行(规范化)

转载 作者:行者123 更新时间:2023-12-04 16:19:25 34 4
gpt4 key购买 nike

我正在从设计不佳的旧数据库升级到新数据库。在旧数据库中有带有字段 Id 和 Commodities 的 tableA。 Id 是主键,包含一个 int,Commodities 包含一个逗号分隔的列表。

表A:

id   | commodities
1135 | fish,eggs,meat
1127 | flour,oil

在新数据库中,我希望 tableB 的格式为 id,commercial,其中每个商品都是 tableA 中逗号分隔列表中的单个项目。

表B:
id   | commodity
1135 | fish
1135 | eggs
1135 | meat
1127 | flour
1127 | oil

我有一个函数 functionA,当给定一个 id、一个列表和一个分隔符时,它返回一个带有 id 和 item 字段的表。如何使用此函数将 tableA 中的两个字段转换为 tableB?

(注意:我无法弄清楚该问题的标题。请随时编辑标题以使其更准确地反射(reflect)问题!)

下面是函数代码:
ALTER  FUNCTION dbo.functionA
(
@id int,
@List VARCHAR(6000),
@Delim varchar(5)
)
RETURNS
@ParsedList TABLE
(
id int,
item VARCHAR(6000)
)
AS
BEGIN
DECLARE @item VARCHAR(6000), @Pos INT
SET @List = LTRIM(RTRIM(@List))+ @Delim
SET @Pos = CHARINDEX(@Delim, @List, 1)
WHILE @Pos > 0
BEGIN
SET @item = LTRIM(RTRIM(LEFT(@List, @Pos - 1)))
IF @item <> ''
BEGIN
INSERT INTO @ParsedList (id, item)
VALUES (@id, CAST(@item AS VARCHAR(6000)))
END
SET @List = RIGHT(@List, LEN(@List) - @Pos)
SET @Pos = CHARINDEX(@Delim, @List, 1)
END
RETURN
END

最佳答案

关于SQL:将一行分成多行(规范化),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3214972/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com