我有两个列,第一个我想要前10个产品(1-10)
那是
SELECT TOP 10 * FROM Product
在第二栏中,我想要接下来的10个结果(11-20)
我该怎么做?
答案 0 :(得分:28)
WITH T AS
(
SELECT TOP 20 name,
row_number() OVER (ORDER BY id) AS RN
FROM Products
ORDER BY id
)
SELECT
MAX(CASE WHEN RN <=10 THEN name END) AS Col1,
MAX(CASE WHEN RN > 10 THEN name END) AS Col2
FROM T
GROUP BY RN % 10
答案 1 :(得分:9)
我会这样做:
SELECT [columns] FROM [table names] ORDER BY [column name] DESC LIMIT 10 OFFSET 10;
这更简单,更简单......
你们有什么想法?
答案 2 :(得分:7)
select top 10 wwwhid from wwwh where wwwhid not in(select top 10 wwwhid from wwwh)
答案 3 :(得分:4)
在SQL Server中,完成此操作有点棘手。如果您使用的是SQL Server 2005或更高版本,则可以使用带有CROSS JOIN
的CTE和一些技巧来获得您正在寻找的结果:
;WITH TopProducts AS
(
SELECT
ProductID, ProductName,
ROW_NUMBER() OVER(ORDER BY --some-column-here-- DESC) 'RN'
FROM dbo.Products
)
SELECT
p1.ProductID, p1.ProductName,
p2.ProductID, p2.ProductName
FROM
TopProducts p1
CROSS JOIN
TopProducts p2
WHERE
p1.RN BETWEEN 1 AND 10 -- get rows 1-10 from the first CTE
-- AND p2.RN BETWEEN 11 AND 20 redundant, as niktrs pointed out
AND p1.RN + 10 = p2.RN -- join rows from P1 and P2 so you don't get a cartesian product
CTE(公用表格表达式)对产品进行编号 - 这需要基于Products
表中的某些列,但您没有提到哪个列定义了订单。
然后我们从CTE中选择1-10行,从CTE的第二个实例中选择11-20行。如果保留原样,您将获得100行 - 第一个结果集中第1-10行的每个组合与第二个结果集中的每一行中的每一行。
这就是为什么你需要一个基于行号的附加条件来“连接”每个结果集中的一行,这样你就会得到十行 - 第一列有Products表中的1-10项,第二列有11-20行
答案 4 :(得分:2)
我不确定这是最好的方法,但它有效
select *
from
(
SELECT top 10 ROW_NUMBER() OVER(ORDER BY product) linenum, product
FROM products
) t1
JOIN
(
SELECT top 20 ROW_NUMBER() OVER(ORDER BY product) linenum, product
FROM products
) t2 ON t1.linenum+10 = t2.linenum
答案 5 :(得分:2)
declare @FromRange int
declare @ToRange int
set @FromRange =11
set @ToRange =20
SELECT top(@ToRange-@FromRange+1) * FROM [tbl]
where tbl_id not in (select top (@FromRange-1) tbl_id from tbl)
ORDER BY tbl_id
答案 6 :(得分:1)
SELECT * FROM Product LIMIT(10,10)
答案 7 :(得分:1)
试试这个:
SELECT *
FROM
(
SELECT TOP 10 ROW_NUMBER() OVER(ORDER BY ColName) RowNo, ColName
FROM TableName
) table1
INNER JOIN
(
SELECT TOP 20 ROW_NUMBER() OVER(ORDER BY ColName) RowNo, ColName
FROM TableName
) table2 ON table1.RowNo + 10 = table2.RowNo
答案 8 :(得分:1)
WITH result_set AS
(SELECT ROW_NUMBER() OVER
(ORDER BY Product.ID DESC) AS
[row_number], Product.intId AS id, Product.Title As Title
FROM Product WHERE Product.Price > 11)
SELECT * FROM result_set WHERE [row_number] BETWEEN 10 AND 19
答案 9 :(得分:1)
使用代码:
select top 20 * from [table Name]
except
select top 10 * from [table Name]
答案 10 :(得分:0)
SELECT p.* FROM
(
SELECT *, ROW_NUMBER() OVER (ORDER BY /*some column*/) AS row_num
FROM Product
) AS p
WHERE p.row_num BETWEEN 11 AND 20
答案 11 :(得分:0)
ViewGroup rootContainer = (ViewGroup) findViewById(R.id.base);
//first scene
ViewGroup startViews = (ViewGroup)getLayoutInflater()
.inflate(R.layout.activity_test_pre, rootContainer, false);
//second scene
ViewGroup endViews = (ViewGroup)getLayoutInflater()
.inflate(R.layout.activity_test, rootContainer, false);
scene1 = new Scene(rootContainer, startViews);
scene2 = new Scene(rootContainer, endViews);
//create transition, set properties
transition = new ChangeBounds();
transition.setDuration(3000);
transition.setInterpolator(new BounceInterpolator());
scene1.enter();
TransitionManager.go(scene2);
答案 12 :(得分:0)
试试这个:
SELECT * FROM
(SELECT ROW_NUMBER() OVER (ORDER BY ColumnName) AS MyRowNumber, *
FROM TableName) tbl
WHERE MyRowNumber BETWEEN 20 AND 30
答案 13 :(得分:0)
从SQL Server 2012 order by offset/fetch功能开始:
main.prototype.saveRecordingMethod = function saveRecordingMethod() {
return audioRecorder.exportWAV(function(blob){return blob;});
};
答案 14 :(得分:0)
您可以通过使用以下SQL查询来执行该操作:
SELECT * FROM [table] LIMIT 10 OFFSET 10
这将从我的表格中选择行,它将给我10行,并跳过前10行。
答案 15 :(得分:-1)
这是我最具体的:
SELECT Col1, Col2, Col3 FROM
(SELECT ROW_NUMBER() OVER (ORDER BY Id) AS MyRowNumber, * FROM table) tbl
WHERE MyRowNumber BETWEEN 11 AND 20;