[英]how to not count 0 when doing row_number
I am doing a row_number()
over some data. 我正在对某些数据执行
row_number()
。
My problem is that I do not wnat to take into account data that is 0
. 我的问题是我不屈服于考虑
0
数据。
Here's my data sample: 这是我的数据示例:
+-----------+-----+
| Alex | 1 |
| Liza | 2 |
| Harry | 0 |
| Marge | 24 |
| Bla | 0 |
| Something | 234 |
+-----------+-----+
Here's what I want: 这就是我想要的:
+-----------+--------+------------+
| name | number | row_number |
+-----------+--------+------------+
| Harry | 0 | 0 |
| Bla | 0 | 0 |
| Something | 234 | 1 |
| Marge | 24 | 2 |
| Liza | 2 | 3 |
| Alex | 1 | 4 |
+-----------+--------+------------+
as you can see the third column is the row_number()
如您所见,第三列是
the row_number()
this is what I have so far: 这是我到目前为止所拥有的:
select name, number, row_number() over (partition by name order by name,number)
from myTable
How do I get the query above to return 0
for all 0's
in the source data and not count the 0's at all towards the row_number sequence ? 如何获取上面的查询,以对源数据中的所有
0's
返回0
, 而不对row_number序列完全计数0 ?
Try this SQL Fiddle : 试试这个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
Try this: 尝试这个:
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
Since you are ordering by numbers descending, the following works if no numbers are negative: 由于您按数字降序排列,因此如果没有数字为负数,则可以使用以下方法:
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.