Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Microsoft SQL Server获取列的10个最高升序值_Sql_Sql Server_Greatest N Per Group - Fatal编程技术网

使用Microsoft SQL Server获取列的10个最高升序值

使用Microsoft SQL Server获取列的10个最高升序值,sql,sql-server,greatest-n-per-group,Sql,Sql Server,Greatest N Per Group,我正在与Microsoft SQL Server合作,发现自己陷入了困境。我想基本上做一个订单一个订单。我当前的SQL查询是: SELECT top 10 labelid FROM mytable ORDER BY labelid DESC 这将按降序返回labelid列的前10个值。不过,我想查询前10个值,并将结果按升序排列 有没有一种不使用过程/plsql/etc的简单方法可以做到这一点?您只需要将查询用作派生表: SELECT * FROM (SELECT TOP 10 label

我正在与Microsoft SQL Server合作,发现自己陷入了困境。我想基本上做一个订单一个订单。我当前的SQL查询是:

SELECT top 10 labelid 
FROM mytable 
ORDER BY labelid DESC
这将按降序返回labelid列的前10个值。不过,我想查询前10个值,并将结果按升序排列


有没有一种不使用过程/plsql/etc的简单方法可以做到这一点?

您只需要将查询用作派生表:

SELECT *
FROM (SELECT TOP 10 labelid 
      FROM mytable 
      ORDER BY labelid DESC) A
ORDER BY labelid;

Lamak的解决方案非常好,派生表非常有趣,但在使用Sql Server和其他拥有它们的平台时,组织代码的一种非常有用的方法是公共表表达式[CTE],在查找/学习时,还可以查看窗口外函数,因为它们很有用

;WITH cte AS (
    SELECT
       labelid 
       ,ROW_NUMBER() OVER (ORDER BY labelid DESC) as RowNum
    FROM
       mytable 
)

SELECT *
FROM
    cte
WHERE
    RowNum <= 10
ORDER BY
    lableid

非常有趣!我必须研究更多的派生表,因为我对SQL非常陌生。非常感谢。由于您是新手,我要注意,除非您也使用top,否则不能在派生表中使用orderby。我不确定你真的会这么做。。。许多SQL纯粹主义者会争辩说top实际上不是一种基于集合的方法。我想他们会争辩说,使用row_number更好,即使top可能会导致更快的查询。plsql是Oracle的过程SQL代码语言-这在SQL Server上不起作用。。。。SQL Server等效于T-SQL或Transact-SQL
;WITH cte AS (
    SELECT
       labelid 
       ,ROW_NUMBER() OVER (ORDER BY labelid DESC) as RowNum
    FROM
       mytable 
)

SELECT *
FROM
    cte
WHERE
    RowNum <= 10
ORDER BY
    lableid