2015-11-19 1 views
1

Структура таблицы: Название таблицы: DETAIL_BOXКак установить динамическое имя столбца для установки значения в инструкции UPDATE SQL Query на основе условия?

----------------------------------------------------------------------------- 
| sn (Number) | name (varchar2) | date1 (date)  | date2 (date)  | 
----------------------------------------------------------------------------- 
| 2   | Ram    | 26.11.2015 00:00:00 | NULL    | 
----------------------------------------------------------------------------- 
| 3   | Sita   | NULL    | 26.11.2015 00:00:00 | 
----------------------------------------------------------------------------- 

Мне нужно один оператор обновления SQL с динамическим столбце название зависит от случая.

Корпус: Если date2 является недействительной дата обновления в date1 иначе обновить значение даты в date2

заявление SQL, как показано ниже, возможно или нет?

  • Для обновления строки, имеющей SN = 2
  • Существует любой запрос, как показано ниже запроса?

    UPDATE DETAIL_BOX SET name='Gita', NVL(date2,date1)=to_date('2015-10-16', 'YYYY-MM-DD') WHERE sn=2

  • Ожидание: значение обновление даты в поле date1, потому что дата2 поле в строке, имеющей SN = 2 NULL.

  • Для обновления строки, имеющей SN = 3
  • Существует любой запрос, как показано ниже запроса?

    UPDATE DETAIL_BOX SET name='Krish', NVL(date2,date1)=to_date('2015-10-16', 'YYYY-MM-DD') WHERE sn=3

  • Ожидание: значение обновление даты в поле дата2, потому что дата2 поле не в строке, имеющей SN = 3 NULL.

Примечание: Над UPDATE SQL запросов не являются правильными. Я просто поставил этот запрос, чтобы спросить любые операторы обновления, чтобы установить динамическое имя столбца для установки значения.

+0

Когда вы говорите, что значение обновления обновления даты в поле - какое поле? У вас есть 2 столбца даты. – BeanFrog

+0

@BeanFrog Пожалуйста, смотрите вопрос, теперь обновленный вопрос. – developerbhuwan

ответ

1

Я бы поставил два ответа (от BeanFrog и Prabhat Sharma) вместе. По-моему, это хорошее решение для обновления столбца до нового значения или для себя в зависимости от критериев.

update detail_box 
set 
    name = decode(sn, 2, 'Gita', 3, 'Krish', name), 
    date1 = (case when sn = 2 and date2 is null then to_date('2015-10-16', 'YYYY-MM-DD') else date1 end), 
    date2 = (case when sn = 3 and date2 is null then to_date('2015-10-16', 'YYYY-MM-DD') else date2 end) 

Пожалуйста, обратите внимание, что decode функция относится к базе данных ORACLE. Его можно было бы изменить до структуры case, если вы хотите иметь общий код независимо от поставщика РСУБД.

2

Я не уверен, где находится sn, но, надеюсь, общий метод поможет.

Update оба поля в выписке обновления, но либо установить их к себе или к новой дате на основе сазе:

UPDATE DETAIL_BOX SET date2= case when date2 is null then date2 else to_date('2015-10-16', 'YYYY-MM-DD') end 
    , date1 = case when date 2 is null then to_date('2015-10-16', 'YYYY-MM-DD') else date1 end 
1

Пожалуйста, смотрите, если это помогает.

Идея состоит в том, чтобы включать все столбцы в один оператор обновления, а затем исходя из ваших критериев, вы можете решить, разрешить ли им изменять или оставить их как есть для определенной строки.

  UPDATE detail_box 
      SET NAME = CASE WHEN sn = 2 THEN 'gita' WHEN sn= 3 THEN 'Krish' ELSE NAME END , 
      date1 = CASE WHEN date1 IS NULL AND sn = 2 THEN date1 WHEN date1 IS NOT NULL AND sn = 2 THEN to_date('24-Nov-2014') ELSE date1 END , 
      date2=CASE WHEN date2 IS NULL and sn= 3 THEN date2 WHEN date2 IS NULL and sn= 3 then to_date('24-Nov-2014') else date2 END 
+0

Вы внимательно прочитали вопрос? – developerbhuwan

Смежные вопросы