#sql-server #sql-update #conditional-statements
#sql-сервер #sql-обновление #условные операторы
Вопрос:
Например, таблица ‘tbl’ содержит столбцы a, b, dt и flag. Где столбцы a и b вместе образуют уникальную комбинацию.
Необходимо обновить все столбцы флагов как неактивные для всех записей с будущей датой
и отметьте флаг как активный для тех же записей с максимальной (dt)<=текущей датой.
Комментарии:
1. что вы подразумеваете под «MAX (DT)»? У вас есть несколько столбцов даты в одной строке, и вы хотите проверить, имеет ли какой-либо из них значение меньше текущей даты? Не могли бы вы, пожалуйста, опубликовать некоторые примеры данных, ожидаемые результаты и ваши попытки?
2. Столбец ‘dt’ состоит из даты, на основе которой необходимо обновить флаг, если для одной уникальной комбинации флаг «дата — будущая дата» должен быть неактивным, а для той же комбинации должна быть активна следующая запись с соответствующей датой
3. Что-то вроде
update tbl set flag = 0 where dt > GETDATE()
? Если a и b образуют уникальные значения, не должно быть одинаковых записей.
Ответ №1:
Как сказал Николаус:
попробуйте это, и это должно сработать :
UPDATE tbl SET FLAG = 0 WHERE dt > GETDATE();
UPDATE tbl SET FLAG = 1 WHERE dt <= GETDATE();
Комментарии:
1. Это то же самое, что: UPDATE tbl SET FLAG = случай, когда dt > GETDATE(), затем 0, еще 1 конец
2. Спасибо @andesta.erfan