gpt4 book ai didi

sql - 如何将OFFSET/FETCH 和WITH TIES 结合在一起?

转载 作者:行者123 更新时间:2023-12-03 02:57:48 25 4
gpt4 key购买 nike

OFFSET FETCH 不支持与 TOP (n) WITH TIES 选项相同的逻辑,该选项通过返回所有关系来确保确定性。

是否有任何解决方法可以将 OFFSET FETCHWITH TIES 结合在一起?

使用示例数据创建语句

CREATE TABLE #tbl(Id INT, Name VARCHAR(10))

INSERT #tbl
SELECT 1, 'a' UNION ALL
SELECT 1, 'a' UNION ALL
SELECT 2, 'b' UNION ALL
SELECT 2, 'b' UNION ALL
SELECT 2, 'b' UNION ALL
SELECT 3, 'c' UNION ALL
SELECT 3, 'c' UNION ALL
SELECT 3, 'c'
<小时/>

顶部

选择前 3 个 * FROM #tbl ORDER BY Id

Id  Name
1 a
1 a
2 b
<小时/>

排名前 n 的领带

选择排名前 3 位的 TIES * FROM #tbl ORDER BY Id

Id  Name
1 a
1 a
2 b
2 b
2 b
<小时/>

偏移获取

SELECT *
FROM #tbl
ORDER BY Id
OFFSET 0 ROWS
FETCH NEXT 3 ROWS ONLY

Id Name
1 a
1 a
2 b

也许我们需要使用Ranking函数来实现这个?

最佳答案

只需将它们一起使用,无需在 CTE 内使用 FETCH 语句

;WITH cte AS
(
SELECT Id, Name
FROM #tbl
ORDER BY Id
OFFSET 0 ROWS
)
SELECT TOP 3 WITH TIES *
FROM cte
ORDER BY Id

参见SQLFiddle

偏移量为 3 SQLFiddle 的示例

;WITH cte AS
(
SELECT Id, Name
FROM #tbl
ORDER BY Id
OFFSET 3 ROWS
)
SELECT TOP 3 WITH TIES *
FROM cte
ORDER BY Id

关于sql - 如何将OFFSET/FETCH 和WITH TIES 结合在一起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31510742/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com