如何获得具有相同ID的第n组两行

时间:2013-12-03 22:27:40

标签: sql sql-server sql-server-2005

在SQL 2005中,我有一个视图,其中包含具有相似数据的行对(按UnitID排名),我需要获得每100对,我该怎么做?我使用以下查询来接近我需要的但是它的等级是每隔一个数字(1,3,5,7,9等等......但是希望它是(1,2,3,4,5)等等)

SELECT * FROM
(
SELECT (RANK() OVER (ORDER BY UnitID)) t,
    TestID, UnitID, Passed, Title
FROM v100thCTS
) q
ORDER BY t

这给了我以下结果:

t     TestID        UnitID     Title 
------------------------------------
1     203430627     18523393   Vout 1 
1     203430628     18523393   Vout 2    
3     203430729     18523403   Vout 1    
3     203430730     18523403   Vout 2    
5     203430751     18523405   Vout 1
5     203430752     18523405   Vout 2
7     203430773     18523407   Vout 1
7     203430774     18523407   Vout 2
9     203430864     18523416   Vout 1
9     203430865     18523416   Vout 2

我没有迭代到100多条记录,但解决方案必须适用于大于或小于100的任意数量的行。在这种情况下,如果我想要每个第二对,那么我的输出将是:

t     TestID        UnitID     Title 
------------------------------------
3     203430729     18523403   Vout 1
3     203430730     18523403   Vout 2
7     203430773     18523407   Vout 1
7     203430774     18523407   Vout 2

1 个答案:

答案 0 :(得分:2)

这应该这样做:

SELECT * FROM (
  SELECT DENSE_RANK() OVER (ORDER BY UnitID) tGroup, TestID, UnitID, Title
  FROM v100thCTS
) q
WHERE tGroup % 2 = 0

输出:

| TGROUP |    TESTID |   UNITID |  TITLE |
|--------|-----------|----------|--------|
|      2 | 203430729 | 18523403 | Vout 1 |
|      2 | 203430730 | 18523403 | Vout 2 |
|      4 | 203430773 | 18523407 | Vout 1 |
|      4 | 203430774 | 18523407 | Vout 2 |

小提琴here

请注意,输出具有更正后的组,根据您的要求,您所说的预期输出实际上并不是预期的输出:)