甚至奇数行也没有使用外部查询

时间:2015-12-17 15:25:03

标签: sql sql-server

SELECT
    a,
    b,
    c,
    ROW_NUMBER() OVER (ORDER BY a) ROWNUM,
    ROW_NUMBER() OVER (ORDER BY a) % 2 BOOL
FROM love
--WHERE BOOL = 1

我试图在不使用外部查询的情况下获取奇数/偶数行。

在同一个查询中使用生成的列不起作用,但有没有办法实现呢?

1 个答案:

答案 0 :(得分:2)

Martin的回答如下:

SELECT TOP (1) WITH TIES a, b, c,
       ROW_NUMBER() OVER (ORDER BY a) as ROWNUM,
       ROW_NUMBER() OVER (ORDER BY a) % 2 as BOOL
FROM love
ORDER BY BOOL DESC;

这非常聪明,我完全归功于马丁。

我会注意到,为保证正确性,这假设a是唯一的。 SQL(和SQL Server)中的排序不稳定。因此,如果存在重复值,则rownumbool的排序可能会有所不同。