![](/img/trans.png)
[英]How to set the out parameter when using ROW_NUMBER() & COUNT(*)
[英]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.