Нам необходимо добавить Ordering в нашу таблицу EventVenue, что мы сделали, добавив поле int для хранения размещения EventVenue в заказе. Порядок определяется на основе идентификатора родительского события и группы мероприятий.
Если VenueGrouping имеет значение false, EventVenues будут упорядочены последовательно. Однако, если true, EventVenues для одного и того же события и полученные из одного и того же родительского события будут иметь одинаковый порядок. Например, [если мы отфильтровали по событию]:
EVID | VenueID | Not Grouped | Grouped
1 | 1 | 1 | 1
2 | 2 | 2 | 2
3 | 2 | 3 | 2
4 | 3 | 4 | 3
Проблема в том, когда группировка меняется. Мне нужно немного SQL, чтобы соответствующим образом обновить порядок мест проведения мероприятия, но мне сложно обойти его, особенно при переходе от разгруппированного к сгруппированному, не оставляя пробелов.
Я бы предположил, что это должно быть в выражении if, как показано ниже, но если подходит более эффективное / СУХОЕ решение, тем лучше:
-- Changing from Ungrouped to Grouped
IF @OldGrouping=0 AND @NewGrouping=1
BEGIN
UPDATE EventVenues SET Ordering=...
END
-- Changing from Grouped to Ungrouped
ELSE IF @OldGrouping=1 AND @NewGrouping=0
BEGIN
UPDATE EventVenues SET Ordering=...
END
Любая помощь приветствуется.
По запросу, дополнительные примеры данных:
Раздражался при форматировании, поэтому использовал ключ для заголовков:
A = EventVenueID, B = VenueID, C = Оригинальный заказ, D = Обновленный заказ
Обновление с разгруппированных на сгруппированные
A | B | C | D
101 | 1 | 4 | 3
102 | 2 | 2 | 2
103 | 2 | 3 | 2
104 | 3 | 1 | 1
Обновление от сгруппированного до несгруппированного
A | B | C | D
101 | 1 | 3 | 4
102 | 2 | 2 | 2
103 | 2 | 2 | 3
104 | 3 | 1 | 1