gpt4 book ai didi

sql - String_Split 多列

转载 作者:行者123 更新时间:2023-12-03 07:54:47 28 4
gpt4 key购买 nike

我需要用分隔值拆分表中两列的值。

我的源表如下所示:

<表类=“s-表”><标题>产品IDean_upc已批准 <正文>21029618710103368021;8710103368038;87101033680141;0;1929236830195161923722;195161923722;101951619237291;1;06563648710103203919;8710103239093;87101032039021;1;17356998710103285885;8710103295938;87101032959520;0;1

我需要的是一个 select 语句,它可以返回每个 product_idEAN代码

SELECT 
product_id, EAN.value
FROM
IceCatUK.dbo.ice_indexCSV_tmp
CROSS APPLY
STRING_SPLIT(ean_upc , ';') EAN

问题是我需要 is_approved信息也。

我的决赛 table 需要有Product_id ,分离EAN_upcis_approved标志。

is_approved必须链接到 EAN 的列

第一行的结果应如下所示:

<表类=“s-表”><标题>产品IDean_upc已批准 <正文>210296187101033680211210296187101033680380210296187101033680141

如何链接 string_split(EAN) 中的位置位置为string_split("is_approved")

最佳答案

与 @lemon 的出色答案类似,但将 EAN 和 APPROVED 收集到单独的结果集中,并加入 product_idordinal 以避免潜在的大型中间笛卡尔结果集这是由交叉应用的两个连接产生的。根据数据的大小,这可能会提高性能。

SELECT ice_indexCSV_tmp.product_id, 
EAN.value as ean_upc,
dt.is_approved
FROM ice_indexCSV_tmp
CROSS APPLY STRING_SPLIT(ean_upc, ';', 1) EAN
INNER JOIN
(
SELECT ice.product_id, APPROVED.value as is_approved, APPROVED.ordinal
FROM ice_indexCSV_tmp ice
CROSS APPLY STRING_SPLIT(is_approved, ';', 1) APPROVED
) dt
ON EAN.ordinal = dt.ordinal
AND ice_indexCSV_tmp.product_id = dt.product_id

dbfiddle version

请注意 enable_ordinal参数仅在 sql-server 2022 16.x 或 Azure 数据库中可用。这是一个可怕的疏忽,在 string_split() 最初推出时没有包含它。

@charleschen 答案中的 row_number 路由可能是下一个最佳选择,但因为无法保证 cross-apply 和 string_split() 吐出的值的顺序 这有点像一场赌博。话虽如此,我从未见过 SQL Server 以与输入的字符串不同的顺序吐出 string_split 结果。

最终,如果我有一个旧版本的 sql-server,其中 enable_ordinal 不可用,并且这是生产级代码,我可能会考虑预处理所使用的源数据在摄取到 sql server 之前填充此表。您可以使用 pandas.Series.explode() 在 pandas 数据框中快速完成此工作。 .

关于sql - String_Split 多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76309566/

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