SQL Server按顺序加入

我在输入中有2个字符串,例如’1,5,6’和’2,89,9′,具有相同数量的元素(3或加号).
我想要的那两个字符串作为“纵坐标连接”
1   2
5   89
6   9

我想要分配一个rownumber并在2个结果集之间建立连接

SELECT a.item,b.item  FROM 
  (
  SELECT  
  ROW_NUMBER() OVER (ORDER BY (SELECT 0)) AS rownumber,*  FROM dbo.Split('1,6',',')
  ) AS a
  INNER JOIN   
  (
  SELECT  
  ROW_NUMBER() OVER (ORDER BY (SELECT 0)) AS rownumber,*  FROM dbo.Split('2,9',')
 ) AS b ON a.rownumber = b.rownumber

这是最好的做法吗?

解决方法

当dbo.Split()返回数据集时,您所做的任何事情都不能绝对确定地分配您想要的row_number(基于它们在字符串中的顺序).如果没有与数据实际相关的ORDER BY,SQL永远不会保证排序.

随着您使用(SELECT 0)订购的技巧,您可能经常得到正确的值.可能经常.但这绝不保证.偶尔你会得到错误的订单.

您最好的选择是重新编码dbo.Split()以在解析字符串时分配row_number.只有这样才能100%确定row_number确实对应于项目在列表中的位置.

然后按照您的建议加入他们,并获得您想要的结果.

除此之外,这个想法对我来说似乎没问题.如果一个列表可能比另一个列表长,您可能希望考虑一个FULL OUTER JOIN.

相关文章

本篇内容主要讲解“sqlalchemy的常用数据类型怎么使用”,感...
今天小编给大家分享一下sqlServer实现分页查询的方式有哪些的...
这篇文章主要介绍“sqlmap之osshell怎么使用”,在日常操作中...
本篇内容介绍了“SQL注入的知识点有哪些”的有关知识,在实际...
1. mssql权限sa权限:数据库操作,文件管理,命令执行,注册...
sql执行计划如何查看?在SPL庞大的数据中我们不知道如何查看...