SQL Server选择前10-20个结果?

时间:2011-09-07 10:59:44

标签: sql sql-server

我有两个列,第一个我想要前10个产品(1-10)

那是

SELECT TOP 10 * FROM Product   

在第二栏中,我想要接下来的10个结果(11-20)

我该怎么做?

16 个答案:

答案 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;
相关问题