我在输入中有 2 个字符串,例如“1,5,6”和“2,89,9”,具有相同数量的元素(3 或以上)。
我想要的那两个字符串作为“纵坐标连接”
1 2
5 89
6 9
我想分配一个行号并在 2 个结果集之间进行连接:
SELECT a.item, b.item FROM
(
SELECT
ROW_NUMBER() OVER (ORDER BY (SELECT 0)) AS rownumber,
* FROM dbo.Split('1,5,6',',')
) AS a
INNER JOIN
(
SELECT
ROW_NUMBER() OVER (ORDER BY (SELECT 0)) AS rownumber,
* FROM dbo.Split('2,89,9',',')
) AS b ON a.rownumber = b.rownumber
那是一个最佳实践 ever?
When dbo.Split()
返回数据集,您所做的任何事情都无法绝对确定地分配您想要的 row_number (基于它们在字符串中的顺序)。 SQL从不保证没有的订购ORDER BY
这实际上与数据有关。
与你trick使用的(SELECT 0)
您可以订购often获得正确的值。大概very经常。但这是never 保证。偶尔有一次你will得到错误的订单。
最好的选择是重新编码dbo.Split()
在解析字符串时分配 row_number 。只有这样,您才能 100% 确定 row_number 确实对应于列表中项目的位置。
然后你按照你的建议加入他们,并得到你想要的结果。
除此之外,这个想法对我来说确实不错。尽管您可能希望考虑FULL OUTER JOIN
如果一个列表可以比另一个列表长。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)