辅助列的SQL Top(2)

时间:2017-12-10 13:04:03

标签: sql sql-server

我有一个查询

SELECT PR.WBS1, PR.WBS2 FROM PR

它带回了我需要的东西,但是想要限制每个WBS1的WBS2的顶部(2)。

Sample Data

3 个答案:

答案 0 :(得分:3)

SELECT PR.WBS1, PR.WBS2 
FROM PR 
WHERE (
    SELECT COUNT(*) 
    FROM PR p
    WHERE p.WBS1 = PR.WBS1 
      AND p.WBS2 >= PR.WBS2
) <= 2;

答案 1 :(得分:3)

您可以使用ROW_NUMBER()。 它基于WBS1进行分组,然后从每个组中选择两个。

;WITH CTE AS (

    SELECT 
        PR.WBS1, 
        PR.WBS2,
        ROW_NUMBER() OVER( PARTITION BY PR.WBS1 ORDER BY PR.WBS2) AS RN
    FROM 
        PR
)

SELECT 
    WBS1,
    WBS2 
FROM 
    CTE 
WHERE 
    RN <=2

答案 2 :(得分:2)

我不得不在上面的答案中改变一些事情。

SELECT PR.WBS1, PR.WBS2 
FROM PR 
WHERE (
    SELECT COUNT(*) 
    FROM PR p
    WHERE p.WBS1 = PR.WBS1 
      AND p.WBS2 <= PR.WBS2
) <= 2;