Обновить значение строки на основе значений из того же столбца

#sql-server

#sql-сервер

Вопрос:

Я вижу много вопросов об обновлении столбцов на основе других столбцов или таблиц, но не видел ответа об обновлении на основе того же столбца, но разных строк.

Расположение данных похоже на это:

Данные

Мне нужно добавить «Y» в закрытый столбец для любой строки, в которой строка под ним имеет «Y» в закрытом столбце.

Итак, в этом примере последовательность 400 получит «Y» в закрытом столбце, потому что строка под ней имеет «Y».

Это применимо только к строкам, содержащим один и тот же номер задания.

(Фон) это происходит, когда люди забывают закрывать последовательности, и это приводит к появлению множества поддельных открытых последовательностей в системе. Мы утомительно закрываем их одно за другим, но решение SQL было бы лучшим.

Комментарии:

1. Вам нужно определить «ниже». Таблица по определению представляет собой неупорядоченный набор. Безопасно ли использовать столбец последовательности для определения порядка?

Ответ №1:

Здесь можно только гадать, поскольку предоставлено не так много информации. Кстати, вам следует избегать использования зарезервированных слов в качестве имен столбцов. Такие вещи, как последовательность, не являются хорошим выбором для имен столбцов.

Что-то вроде этого должно быть близко.

 Update yt
set Closed = 'Y'
from YourTable yt
where yt.[Sequence] < (select max(Sequence) from YourTable yt2 where yt2.JobNumber = yt.JobNumber and Closed = 'Y')
  

Комментарии:

1. Спасибо, я впервые задаю вопрос, поэтому я не уверен, сколько подробностей нужно предоставить. Я больше искал общий метод, с помощью которого это будет сделано, и работал с ним оттуда. Большое спасибо, я попробую.

2. Дело в том, что я использую Pervasive Control Center для доступа к базе данных, и я не знаю, как превратить изображение сетки в файл изображения для загрузки здесь. Вот почему я сделал грубую / базовую копию в Excel, чтобы проиллюстрировать, что я пытаюсь сделать.

3. Обновите YT, установив FLAG_CLOSED = ‘Y’ ИЗ Job_Operations, ГДЕ yt.SEQ < (ВЫБЕРИТЕ MAX (SEQ) ИЗ JOB_OPERATIONS yt2, ГДЕ yt2.Job=yt.Job и Flag_Closed = ‘Y’

4. Так это сработало для вас или нет? Я не могу сказать. Если это так, вы можете пометить его как принятый ответ.

5. Я потратил последние десять минут, пытаясь выяснить, как удалить комментарий. Извините за все это. Я предоставлю больше информации, как только узнаю, как лучше работать с сайтом.