我找到了很多关于这个主题的问题并提供了很好的解决方案,但是如果不以某种特定的方式对数据进行排序,那么它们实际上都没有解决该怎么做.例如,以下查询:
WITH MyCte AS
(
select employee_id,
RowNum = row_number() OVER ( order by employee_id )
from V_EMPLOYEE
ORDER BY Employee_ID
)
SELECT employee_id
FROM MyCte
WHERE RowNum > 0
Run Code Online (Sandbox Code Playgroud)
如果要通过employee_id订购数据,则效果很好.但是,如果我的数据没有任何特定的顺序,但行号本身作为ID怎么办?我的目标是编写一个这样的查询(Row_Number()函数没有ORDER BY子句):
WITH MyCte AS
(
select employee_id,
RowNum = row_number() OVER ( <PRESERVE ORIGINAL ORDER FROM DB> )
from V_EMPLOYEE
ORDER BY Employee_ID
)
SELECT employee_id
FROM MyCte
WHERE RowNum > 0
Run Code Online (Sandbox Code Playgroud)
编辑:通过谷歌搜索,我发现这是不可能的.有人可以建议一个解决方法吗?
我试图从一个表插入另一个表使用
DECLARE @IDOffset int;
SELECT @IDOffset = MAX(ISNULL(ID,0)) FROM TargetTable
INSERT INTO TargetTable(ID, FIELD)
SELECT [Increment] + @IDOffset ,FeildValue
FROM SourceTable
WHERE [somecondition]
Run Code Online (Sandbox Code Playgroud)
TargetTable.ID不是标识列,这就是为什么我必须找到一种自己增加它的方法.
我知道我可以使用游标,或者创建一个带有标识列和FieldValue字段的表变量,填充它,然后在我的中使用它insert into...select,但这不是很有效.我尝试使用ROW_NUMBER函数来递增,但我在SourceTable中确实没有合法的ORDER BY字段可以使用,并且希望保留SourceTable的原始顺序(如果可能).
谁能提出任何建议?
我在输入中有2个字符串,例如'1,5,6'和'2,89,9',具有相同数量的元素(3或加号).我想要的那两个字符串作为"纵坐标连接"
1 2
5 89
6 9
Run Code Online (Sandbox Code Playgroud)
我想要分配一个rownumber并在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
Run Code Online (Sandbox Code Playgroud)
这是最好的做法吗?