1

私は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 |
+-----------+--------+------------+

ご覧のとおり、3列目はthe row_number()

これは私がこれまでに持っているものです:

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

上記のクエリでソース データの0すべてを返し、row_number シーケンスに対して 0 をまったくカウントしないようにするにはどうすればよいですか?0's

4

2 に答える 2

4

この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
于 2012-09-13T19:32:40.853 に答える
2

これを試して:

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
于 2012-09-13T19:35:35.887 に答える