相关疑难解决方法(0)

没有ORDER BY的Where子句中的SQL Row_Number()函数?

我找到了很多关于这个主题的问题并提供了很好的解决方案,但是如果不以某种特定的方式对数据进行排序,那么它们实际上都没有解决该怎么做.例如,以下查询:

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)

编辑:通过谷歌搜索,我发现这是不可能的.有人可以建议一个解决方法吗?

sql database sql-server

42
推荐指数
3
解决办法
5万
查看次数

没有ORDER BY的SQL Server 2005 ROW_NUMBER()

我试图从一个表插入另一个表使用

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的原始顺序(如果可能).

谁能提出任何建议?

sql t-sql sql-server sql-server-2005 auto-increment

29
推荐指数
1
解决办法
5万
查看次数

SQL Server按顺序加入

我在输入中有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)

这是最好的做法吗?

sql sql-server join sql-server-2008

7
推荐指数
2
解决办法
1780
查看次数