Sql 继续。。thanks@Joseph,您提供的链接中的选定答案()与提问者在回答中提供的工作代码不同:如果你阅读了该答案,你会看到他们代码的链接:以及Tomalak版本的链接:在我的回答中,我使用表变量sthx Shannon提供每个版本的工作版本。您使用的
Sql 继续。。thanks@Joseph,您提供的链接中的选定答案()与提问者在回答中提供的工作代码不同:如果你阅读了该答案,你会看到他们代码的链接:以及Tomalak版本的链接:在我的回答中,我使用表变量sthx Shannon提供每个版本的工作版本。您使用的,sql,sql-server,tsql,analytic-functions,Sql,Sql Server,Tsql,Analytic Functions,继续。。thanks@Joseph,您提供的链接中的选定答案()与提问者在回答中提供的工作代码不同:如果你阅读了该答案,你会看到他们代码的链接:以及Tomalak版本的链接:在我的回答中,我使用表变量sthx Shannon提供每个版本的工作版本。您使用的是哪个版本的SQL Server?这意味着,该链接中提供的答案是错误的?但是,发布该问题的人同意该问题有效。。令人惊讶…-)@Joseph,但如果你看OP在链接问题中发布的另一个答案,你会发现他链接到的代码版本与公认答案中的不同。我不知道为什么
继续。。thanks@Joseph,您提供的链接中的选定答案()与提问者在回答中提供的工作代码不同:如果你阅读了该答案,你会看到他们代码的链接:以及Tomalak版本的链接:在我的回答中,我使用表变量sthx Shannon提供每个版本的工作版本。您使用的是哪个版本的SQL Server?这意味着,该链接中提供的答案是错误的?但是,发布该问题的人同意该问题有效。。令人惊讶…-)@Joseph,但如果你看OP在链接问题中发布的另一个答案,你会发现他链接到的代码版本与公认答案中的不同。我不知道为什么他接受了这个答案,尽管它不会像输入的那样运行。也许它在被接受后的某个时候被编辑过,也许它足以让他继续,即使没有完全正确。@Rexem:SQLServer2005和SQLServer2008。早期版本不支持CTEs或ROW_NUMBER(),如果上述查询不适用于您,请为表创建别名。将V_EMPLOYEE的最后一行修改为
)A
,即添加一个别名。@davidechico.it:在SQL Server中,派生表需要一个别名(我本应将写成q
,但这也行)。可读性是我命名别名时的重点。您可以将rn写为RowNumber,将q写为DerivedTable,将where子句写为where DerivedTable.RowNumber>0。在我看来,6个月后,当代码在你脑海中并不新鲜时,这将大大减少混乱。@EdwardComeau:rn
是当今世界公认的行号缩写。尝试在谷歌搜索字符串中键入“row_number over as…”,看看它给你带来了什么启示。@好的编码关键在于可读性,翻译rn(或其他缩写别名)的认知努力对你自己和维护代码的人都有好处。注意,Microsoft first hit,选择(按SalesYTD描述订购)上方的行作为行,。。。我以前也没有遇到过rn,所以您在“universal”中的里程数可能会有所不同。@Quassnoi,和second hit,so文章-几个变体,而不是rn;-)欢迎来到堆栈溢出!虽然这个代码片段可能是解决方案,但它确实有助于提高文章的质量。请记住,您将为将来的读者回答这个问题,而这些人可能不知道您的代码建议的原因。为了将来的读者的利益,请为代码片段添加一些上下文。
SELECT employee_id
FROM V_EMPLOYEE
WHERE row_number() OVER ( ORDER BY employee_id ) > 0
ORDER BY Employee_ID
SELECT employee_id
FROM (
SELECT employee_id, ROW_NUMBER() OVER (ORDER BY employee_id) AS rn
FROM V_EMPLOYEE
) q
WHERE rn > 0
ORDER BY
Employee_ID
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
SELECT employee_id
FROM (SELECT employee_id, row_number()
OVER (order by employee_id) AS 'rownumber'
FROM V_EMPLOYEE) TableExpressionsMustHaveAnAliasForDumbReasons
WHERE rownumber > 0
WITH employee_rows AS (
SELECT t.employee_id,
ROW_NUMBER() OVER ( ORDER BY t.employee_id ) 'rownum'
FROM V_EMPLOYEE t)
SELECT er.employee_id
FROM employee_rows er
WHERE er.rownum > 1
SELECT er.employee_id
FROM (SELECT t.employee_id,
ROW_NUMBER() OVER ( ORDER BY t.employee_id ) 'rownum'
FROM V_EMPLOYEE t) er
WHERE er.rownum > 1
WITH object_rows AS (
SELECT object_id,
ROW_NUMBER() OVER ( ORDER BY object_id) RN
FROM sys.objects)
SELECT object_id
FROM object_rows
WHERE RN > 1
SELECT object_id
FROM (SELECT object_id,
ROW_NUMBER() OVER ( ORDER BY object_id) RN
FROM sys.objects) T
WHERE RN > 1
DECLARE @YourTable table (RowID int not null primary key identity, Value1 int, Value2 int, value3 int)
SET NOCOUNT ON
INSERT INTO @YourTable VALUES (1,1,1)
INSERT INTO @YourTable VALUES (1,1,2)
INSERT INTO @YourTable VALUES (1,1,3)
INSERT INTO @YourTable VALUES (1,2,1)
INSERT INTO @YourTable VALUES (1,2,2)
INSERT INTO @YourTable VALUES (1,2,3)
INSERT INTO @YourTable VALUES (1,3,1)
INSERT INTO @YourTable VALUES (1,3,2)
INSERT INTO @YourTable VALUES (1,3,3)
INSERT INTO @YourTable VALUES (2,1,1)
INSERT INTO @YourTable VALUES (2,1,2)
INSERT INTO @YourTable VALUES (2,1,3)
INSERT INTO @YourTable VALUES (2,2,1)
INSERT INTO @YourTable VALUES (2,2,2)
INSERT INTO @YourTable VALUES (2,2,3)
INSERT INTO @YourTable VALUES (2,3,1)
INSERT INTO @YourTable VALUES (2,3,2)
INSERT INTO @YourTable VALUES (2,3,3)
INSERT INTO @YourTable VALUES (3,1,1)
INSERT INTO @YourTable VALUES (3,1,2)
INSERT INTO @YourTable VALUES (3,1,3)
INSERT INTO @YourTable VALUES (3,2,1)
INSERT INTO @YourTable VALUES (3,2,2)
INSERT INTO @YourTable VALUES (3,2,3)
INSERT INTO @YourTable VALUES (3,3,1)
INSERT INTO @YourTable VALUES (3,3,2)
INSERT INTO @YourTable VALUES (3,3,3)
SET NOCOUNT OFF
DECLARE @PageNumber int
DECLARE @PageSize int
DECLARE @SortBy int
SET @PageNumber=3
SET @PageSize=5
SET @SortBy=1
--SELECT * FROM @YourTable
--Method 1
;WITH PaginatedYourTable AS (
SELECT
RowID,Value1,Value2,Value3
,CASE @SortBy
WHEN 1 THEN ROW_NUMBER() OVER (ORDER BY Value1 ASC)
WHEN 2 THEN ROW_NUMBER() OVER (ORDER BY Value2 ASC)
WHEN 3 THEN ROW_NUMBER() OVER (ORDER BY Value3 ASC)
WHEN -1 THEN ROW_NUMBER() OVER (ORDER BY Value1 DESC)
WHEN -2 THEN ROW_NUMBER() OVER (ORDER BY Value2 DESC)
WHEN -3 THEN ROW_NUMBER() OVER (ORDER BY Value3 DESC)
END AS RowNumber
FROM @YourTable
--WHERE
)
SELECT
RowID,Value1,Value2,Value3,RowNumber
,@PageNumber AS PageNumber, @PageSize AS PageSize, @SortBy AS SortBy
FROM PaginatedYourTable
WHERE RowNumber>=(@PageNumber-1)*@PageSize AND RowNumber<=(@PageNumber*@PageSize)-1
ORDER BY RowNumber
--------------------------------------------
--Method 2
;WITH PaginatedYourTable AS (
SELECT
RowID,Value1,Value2,Value3
,ROW_NUMBER() OVER
(
ORDER BY
CASE @SortBy
WHEN 1 THEN Value1
WHEN 2 THEN Value2
WHEN 3 THEN Value3
END ASC
,CASE @SortBy
WHEN -1 THEN Value1
WHEN -2 THEN Value2
WHEN -3 THEN Value3
END DESC
) RowNumber
FROM @YourTable
--WHERE more conditions here
)
SELECT
RowID,Value1,Value2,Value3,RowNumber
,@PageNumber AS PageNumber, @PageSize AS PageSize, @SortBy AS SortBy
FROM PaginatedYourTable
WHERE
RowNumber>=(@PageNumber-1)*@PageSize AND RowNumber<=(@PageNumber*@PageSize)-1
--AND more conditions here
ORDER BY
CASE @SortBy
WHEN 1 THEN Value1
WHEN 2 THEN Value2
WHEN 3 THEN Value3
END ASC
,CASE @SortBy
WHEN -1 THEN Value1
WHEN -2 THEN Value2
WHEN -3 THEN Value3
END DESC
RowID Value1 Value2 Value3 RowNumber PageNumber PageSize SortBy
------ ------ ------ ------ ---------- ----------- ----------- -----------
10 2 1 1 10 3 5 1
11 2 1 2 11 3 5 1
12 2 1 3 12 3 5 1
13 2 2 1 13 3 5 1
14 2 2 2 14 3 5 1
(5 row(s) affected
RowID Value1 Value2 Value3 RowNumber PageNumber PageSize SortBy
------ ------ ------ ------ ---------- ----------- ----------- -----------
10 2 1 1 10 3 5 1
11 2 1 2 11 3 5 1
12 2 1 3 12 3 5 1
13 2 2 1 13 3 5 1
14 2 2 2 14 3 5 1
(5 row(s) affected)
Select * from
(
Select ROW_NUMBER() OVER ( order by Id) as 'Row_Number', *
from tbl_Contact_Us
) as tbl
Where tbl.Row_Number = 5
select salary from (
select Salary, ROW_NUMBER() over (order by Salary desc) rn from Employee
) t where t.rn = 2