繁体   English   中英

如何在执行row_number时不计算0

[英]how to not count 0 when doing row_number

我正在对某些数据执行row_number()

我的问题是我不屈服于考虑0数据。

这是我的数据示例:

+-----------+-----+
| Alex      |   1 |
| Liza      |   2 |
| Harry     |   0 |
| Marge     |  24 |
| Bla       |   0 |
| Something | 234 |
+-----------+-----+

这就是我想要的:

+-----------+--------+------------+
|   name    | number | row_number |
+-----------+--------+------------+
| Harry     |      0 |          0 |
| Bla       |      0 |          0 |
| Something |    234 |          1 |
| Marge     |     24 |          2 |
| Liza      |      2 |          3 |
| Alex      |      1 |          4 |
+-----------+--------+------------+

如您所见,第三列是the row_number()

这是我到目前为止所拥有的:

select name, number, row_number() over (partition by name order by name,number)
from myTable

如何获取上面的查询,以对源数据中的所有0's返回0而不对row_number序列完全计数0

试试这个SQL小提琴

SELECT name, number, 0 as [row_number]
FROM myTable
WHERE number = 0
UNION ALL
SELECT name, number, row_number() OVER (ORDER BY number DESC)
FROM myTable
WHERE number <> 0

尝试这个:

select name, number,
       (case when number = 0 then 0
             else row_number() over (partition by iszero order by number desc)
        end) as row_number
from (select t.*, (case when number = 0 then 0 else 1 end) as iszero
      from myTable t
     ) t

由于您按数字降序排列,因此如果没有数字为负数,则可以使用以下方法:

select name, number,
       (case when number = 0 then 0
             else row_number() over (order by number desc)
        end) as row_number
from myTable t

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM