使用Microsoft SQL Server获取列的10个最高升序值
我正在与Microsoft SQL Server合作,发现自己陷入了困境。我想基本上做一个订单一个订单。我当前的SQL查询是:使用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
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