在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
答案 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。
请注意,输出具有更正后的组,根据您的要求,您所说的预期输出实际上并不是预期的输出:)