2015-03-22 3 views
0
update Room set Status = case 
         when Room_Rev.In_DateTime IS NOT NULL and Room_Rev.Out_DateTime IS NULL 
          then 'U' 
         when Room_Rev.In_DateTime IS NOT NULL and Room_Rev.Out_DateTime IS NOT NULL 
          then 'A'  
         when Room.Status!='R' and Room.Status!='U' and Room.Status!='A' 
          then Room.Status 
         else 'R' 
           end 
           FROM Room JOIN Room_Rev 
        ON Room.Room_ID=Room_Rev.Room_ID 
        and 
        ((Room_Rev.Start_Date >= '2015-03-22' and Room_Rev.End_Date <= '2015-03-22') 
           OR 
        (Room_Rev.Start_Date<= '2015-03-22' and Room_Rev.End_Date> '2015-03-22') 
           OR 
        (Room_Rev.Start_Date< '2015-03-22' and Room_Rev.End_Date>= '2015-03-22')) 

Как добавить заказ от пользователя Rev_ID в запросе? Есть две таблицы, которые есть номер и Room_Rev, они один-ко-многимКак добавить заказ по sql-запросу

Room_Rev table Последние две строки ROM0006 уже заполнить In_DateTime и Out_DateTime, таким образом считают проверить, и последняя строка вставить новый резервирование, In_DateTime является нулевым , таким образом, мне нужно вернуть запрос «R» (Зарезервировано статус)

+0

это действительно ** Microsoft ** SQL-сервер? если да, то какая версия? –

+0

Что вы пытаетесь достичь? –

+0

SQL Server 2008 – YWX

ответ

1

в качестве одного из возможных решений, я предлагаю вложенный запрос вместо объединения в UPDATE заявление. Логика обновления мне не совсем понятна, поэтому я оставляю окончательное обновление для OP, чтобы скорректировать порядок сортировки (примечание I использовало top 1 и order by room_ID во вложенном операторе SELECT). Однако этот подход позволяет обрабатывать все обычные методы, применимые для SELECT.

update Room set Status = (select TOP 1 case 
     when Room_Rev.In_DateTime IS NOT NULL and Room_Rev.Out_DateTime IS NULL 
      then 'U' 
     when Room_Rev.In_DateTime IS NOT NULL and Room_Rev.Out_DateTime IS NOT NULL 
      then 'A'  
     when Room.Status!='R' and Room.Status!='U' and Room.Status!='A' 
      then Room.Status 
      else 'R' 
     end 
    FROM Room_Rev 
    WHERE Room.Room_ID=Room_Rev.Room_ID 
    and 
    ((Room_Rev.Start_Date >= '2015-03-22' and Room_Rev.End_Date <= '2015-03-22') 
       OR 
    (Room_Rev.Start_Date<= '2015-03-22' and Room_Rev.End_Date> '2015-03-22') 
       OR 
    (Room_Rev.Start_Date< '2015-03-22' and Room_Rev.End_Date>= '2015-03-22')) 
    ORDER BY Room_Rev.Room_Id 
    ) 

PS. В качестве рекомендации я до сих пор считаю, что такой подход недействителен. Это предотвращает правильную нормализацию данных. Вы бы предпочли, чтобы эта информация всегда запрашивалась динамически, когда это необходимо, вместо того, чтобы писать статическое значение в ROOM.status

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