相关疑难解决方法(0)

为派生表计算SQL Server ROW_NUMBER()OVER()

在一些其他数据库(例如DB2或Oracle ROWNUM)中,我可以省略ORDER BY排名函数子句中的OVER()子句.例如:

ROW_NUMBER() OVER()
Run Code Online (Sandbox Code Playgroud)

当与有序派生表一起使用时,这尤其有用,例如:

SELECT t.*, ROW_NUMBER() OVER()
FROM (
    SELECT ...
    ORDER BY
) t
Run Code Online (Sandbox Code Playgroud)

如何在SQL Server中进行模拟?我发现人们使用这个 技巧,但这是错误的,因为它对于派生表中的顺序会表现得非确定:

-- This order here ---------------------vvvvvvvv
SELECT t.*, ROW_NUMBER() OVER(ORDER BY (SELECT 1))
FROM (
    SELECT TOP 100 PERCENT ...
    -- vvvvv ----redefines this order here
    ORDER BY
) t
Run Code Online (Sandbox Code Playgroud)

一个具体的例子(可以在SQLFiddle看到):

SELECT v, ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) RN
FROM (
  SELECT TOP 100 PERCENT 1 UNION ALL …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server window-functions ranking-functions

12
推荐指数
1
解决办法
4万
查看次数

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
查看次数