Sql Distinct Top

时间:2014-12-23 01:28:56

标签: sql sql-server-2008

我的查询目前的结构如下:

Select top 10 ID, CalculatedColumn
From Table

通过将我们加入的表中的某些字段相加来构建计算列。

返回的数据如下所示:

 +----------------------------------------------+
 | Id           Calculated Column               |
 |----------------------------------------------|
 | 1            10                              |
 | 2            11                              |
 | 3            12                              |
 | 4            13                              |
 | 5            14                              |
 | 6            14                              |
 | 7            14                              |
 | 8            14                              |
 | 9            14                              |
 | 10           14                              |
 +----------------------------------------------+

我想更改查询,因此选择前5行会产生当前结果。也就是说,我想选择前5个不同的计算值。

我遇到的所有示例都涉及选择不同的ID,您可以转换并加入反对值。

有没有办法可以在SQL中执行此操作?

2 个答案:

答案 0 :(得分:2)

您可以在计算列上使用RANK function。绑定的计算值将具有相同的等级。

例如:

SELECT Id, ComputedColumn
FROM
(
    SELECT Id, ComputedColumn, RANK() OVER (ORDER BY ComputedColumn) Rnk
    FROM TableName
) x
WHERE Rnk <= 5

答案 1 :(得分:1)

非常直接的可能性是这样的:

WITH cte AS
(
  SELECT TOP 5 CalculatedColumn
  FROM Table1
  GROUP BY CalculatedColumn
  ORDER BY CalculatedColumn
)
SELECT * FROM Table1 t
WHERE EXISTS
  (SELECT 1 FROM cte WHERE CalculatedValue = t.CalculatedValue)
ORDER BY CalculatedValue, ID