相关疑难解决方法(0)

我如何使用ROW_NUMBER()?

我想用它ROW_NUMBER()来...

  1. 得到max(ROW_NUMBER())- >或者我猜这也是所有行的计数

我试过做:

SELECT max(ROW_NUMBER() OVER(ORDER BY UserId)) FROM Users
Run Code Online (Sandbox Code Playgroud)

但它似乎没有工作......

  1. 要获得ROW_NUMBER()使用给定的资料片,即得.如果我有一个名字,我想知道名字来自哪一行.

我认为这将类似于我为#1尝试的东西

SELECT ROW_NUMBER() OVER(ORDER BY UserId) From Users WHERE UserName='Joe'
Run Code Online (Sandbox Code Playgroud)

但这也不起作用......

有任何想法吗?

sql sql-server row-number

166
推荐指数
7
解决办法
80万
查看次数

为什么在where子句中没有窗口函数?

标题说明了这一点,为什么我不能在SQL Server的where子句中使用窗口函数?

这个查询很有意义:

select id, sales_person_id, product_type, product_id, sale_amount
from Sales_Log
where 1 = row_number() over(partition by sales_person_id, product_type, product_id order by sale_amount desc)
Run Code Online (Sandbox Code Playgroud)

但它不起作用.有没有比CTE /子查询更好的方法?

编辑

值得一提的是CTE的查询:

with Best_Sales as (
    select id, sales_person_id, product_type, product_id, sale_amount, row_number() over (partition by sales_person_id, product_type, product_id order by sales_amount desc) rank
    from Sales_log
)
select id, sales_person_id, product_type, product_id, sale_amount
from Best_Sales
where rank = 1
Run Code Online (Sandbox Code Playgroud)

编辑

用子查询显示答案的+1,但实际上我正在寻找无法在where子句中使用窗口函数的原因.

sql t-sql sql-server window-functions

47
推荐指数
4
解决办法
3万
查看次数

使用SQL Server 2005中的ROW_NUMBER()OVER()在不同列上进行排序的分页查询

假设我正在使用Northwind数据库,并且我希望通过包含以下参数的存储过程运行查询:

  • @Offset 指示分页开始的位置,
  • @Limit 表示页面大小,
  • @SortColumn 表示用于分类目的的列,
  • @SortDirection,表示上升或后代排序.

我的想法是对数据库进行分页,因为结果集包含数千行,因此缓存不是一个选项(并且使用VIEWSTATE甚至不被视为IMO,很糟糕).

您可能知道SQL Server 2005提供了函数ROW_NUMBER,它返回结果集的分区中的行的序号,从1开始,每个分区的第一行.

我们需要对每个返回的列进行排序(本例中为5),动态SQL不是一个选项,因此我们有两种可能:使用大量的IF ... ELSE ...10个查询,这是一个难以维护的地狱,或者具有如下查询:

WITH PaginatedOrders AS (
    SELECT
        CASE (@SortColumn + ':' + @SortDirection)
            WHEN 'OrderID:A' THEN ROW_NUMBER() OVER (ORDER BY Orders.OrderID ASC)
            WHEN 'OrderID:D' THEN ROW_NUMBER() OVER (ORDER BY Orders.OrderID DESC)
            WHEN 'CustomerID:A' THEN ROW_NUMBER() OVER (ORDER BY Orders.CustomerID ASC)
            WHEN 'CustomerID:D' THEN ROW_NUMBER() OVER (ORDER BY Orders.CustomerID DESC)
            WHEN 'EmployeeID:A' THEN ROW_NUMBER() OVER (ORDER BY Orders.EmployeeID ASC)
            WHEN …
Run Code Online (Sandbox Code Playgroud)

pagination sql-server-2005

8
推荐指数
1
解决办法
6658
查看次数

逐行循环遍历表 T-SQL

在 T-SQL 中,我想通过逐行读取来循环访问存储过程中的表。

DECLARE @IMAX INT,
        @ICOUNT INT,
        @INTERFACE_ID_36 INT,
        @INTERFACE_ID_38 INT

SELECT * FROM INTERFACE_36_DATA

SET @IMAX = @@ROWCOUNT
SET @ICOUNT = 1

WHILE(@ICOUNT <= @IMAX)
    BEGIN
        SELECT @INTERFACE_ID_36 = Interface_ID
        FROM INTERFACE_36_DATA
        WHERE ROW_NUMBER() OVER (ORDER BY id) AS  = @ICOUNT   --syntax error here

            IF @INTERFACE_ID_36 = 10
                SET @INTERFACE_ID_38 = 0
            ELSE IF @INTERFACE_ID_36 = 
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server

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