У меня есть таблица Microsoft SQL Server, в которой есть два столбца - один для местоположений и один для связанных изображений . До сих пор, несколько изображений могли быть связаны с одним и тем же местом, и только последнее загруженное изображение фактически использовалось на мобильном сайте. Это было достигнуто путем присвоения ImageRank каждой строке:
RANK() OVER (PARTITION BY Location ORDER BY Image DESC) ImageRank
, так что только строки с ImageRank = 1 были выбраны процессом SSIS, который имел дело с мобильным сайтом:
Теперь мы хотим иметь возможность выбрать , какое из существующих изображений (а не только последнее) для отображения. Для этого мы ввели третий столбец - MobileSelection типа bit. Поскольку этот столбец был введен поздно, он имеет пустые значения для всех существующих строк.
Итак, у меня есть что-то вроде этого:
+-------+----------+-----------------+-----------+
| image | location | MobileSelection | ImageRank |
+-------+----------+-----------------+-----------+
| 850 | 10 | NULL | 1 |
| 209 | 10 | NULL | 2 |
+-------+----------+-----------------+-----------+
И я хочу установить только строку с ImageRank равным 1 до 1. Имейте в виду, что ImageRank не является фактическим столбцом, иначе это было бы тривиально.
Моя цель - иметь возможность написать оператор обновления, который присвоил бы этому столбцу значение 1, если строка is on имеет рассчитанный ImageRank, равный 1. Проблема, с которой я сталкиваюсь, заключается в том, что я могу объединить предложение Rank Over Partition (или что-то подобное) с оператором Update:
UPDATE dining_location SET MobileSelection = 1 WHERE RANK() OVER (PARTITION BY Location ORDER BY Image DESC) = 1;
Приведенное выше возвращает эту ошибку:
Оконные функции могут появляться только в предложениях SELECT или ORDER BY.
Я был бы признателен за любую помощь с этим. Спасибо!