2016-02-15 5 views
0

Предположим, у меня есть таблица, которая выглядит следующим образом:Как таблицу массового обновления

+----+-----------+------+-------+--+ 
| id | Part  | Seq | Model | | 
+----+-----------+------+-------+--+ 
| 1 | Head  | 0 | 3  | | 
| 2 | Neck  | 1 | 3  | | 
| 3 | Shoulders | 11 | 3  | | 
| 4 | Groin  | 2 | 3  | | 
| 5 | Stomach | 5 | 3  | | 
+----+-----------+------+-------+--+ 

Как вы можете видеть поле Seq является порядок эти элементы будут отображаться на переднем конце. Вот Seq 0, 1, 2, 5, 11. Теперь пользователь хочет изменить порядок списка. Если они хотят, чтобы Stomach (id: 5) имел seq: 0, как бы я написал запрос для обновления всех значений Seq только для модели 3?

+0

ли Вы хотите сделать Желудок первый элемент, и переместить остальные (приращение на единицу), или обменять в настоящее время первый или что-то еще? –

+0

Да, я хочу, чтобы Желудок был первым, а другие спустились вниз. – Luke101

+1

Возможно: http://stackoverflow.com/questions/8607998/using-a-sort-order-column-in-a-database-table/8608085#8608085 – xQbert

ответ

0

Вот один метод, который перераспределяет порядковые номера, как упорядоченных чисел, с «Живот» первым:

with toupdate as (
     select t.*, 
      row_number() over (partition by model -- not really necessary 
           order by (case when Part = 'Stomach' then -1 
               else seq 
              end) 
           ) as newseq 
     from t 
     where model = 3 
    ) 
update toupdate 
    set seq = newseq; 
Смежные вопросы