2015-10-05 5 views
0

Я пытаюсь создать CASE, где я могу проверить уникальное значение хэша, которое установит нового владельца, в зависимости от того, какое значение хеша совпадает с созданием билета. Вот то, что я в настоящее время:SQL WHERE CASE Check hash values ​​

Select DISTINCT HD_TICKET.*, USER 
FROM HD_TICKET 
Where 
    CASE 
    WHEN HD_STATUS_ID = 1 AND HD_TICKET.TITLE LIKE '%#:020:#%' THEN 
    UPDATE HD_TICKET, USER 
    SET HD_TICKET.Owner_ID = USER.ID 
    WHERE USER.ID = '1234' 

    WHEN HD_STATUS_ID = 1 AND HD_TICKET.TITLE LIKE '%#:030:#%' THEN 
    UPDATE HD_TICKET, USER 
    SET HD_TICKET.Owner_ID = USER.ID 
    WHERE USER.ID = '1235' 

    WHEN HD_STATUS_ID = 1 AND HD_TICKET.TITLE LIKE '%#:040:#%' THEN 
    UPDATE HD_TICKET, USER 
    SET HD_TICKET.Owner_ID = USER.ID 
    WHERE USER.ID = '1236' 

    WHEN HD_STATUS_ID = 1 AND HD_TICKET.TITLE LIKE '%#:050:#%' THEN 
    UPDATE HD_TICKET, USER 
    SET HD_TICKET.Owner_ID = USER.ID 
    WHERE USER.ID = '1237' 

    WHEN HD_STATUS_ID = 1 AND HD_TICKET.TITLE LIKE '%#:060:#%' THEN 
    UPDATE HD_TICKET, USER 
    SET HD_TICKET.Owner_ID = USER.ID 
    WHERE USER.ID = '1238' 

    WHEN HD_STATUS_ID = 1 AND HD_TICKET.TITLE LIKE '%#:070:#%' THEN 
    UPDATE HD_TICKET, USER 
    SET HD_TICKET.Owner_ID = USER.ID 
    WHERE USER.ID = '1239' 

    WHEN HD_STATUS_ID = 1 AND HD_TICKET.TITLE LIKE '%#:080:#%' THEN 
    UPDATE HD_TICKET, USER 
    SET HD_TICKET.Owner_ID = USER.ID 
    WHERE USER.ID = '1240' 
END 
+0

Вы не можете вставлять операторы обновления внутри предложения where. – siride

ответ

1

Вы упрощаете (и снова упрощаете). Это должно дать вам то, что вы после:

update hd_ticket 
set hd.owner_id = case 
        when hd.title like '%#:020:#%' THEN '1234' 
        when hd.title like '%#:030:#%' THEN '1235' 
        when hd.title like '%#:040:#%' THEN '1236' 
        when hd.title like '%#:050:#%' THEN '1237' 
        when hd.title like '%#:060:#%' THEN '1238' 
        when hd.title like '%#:070:#%' THEN '1239' 
        when hd.title like '%#:080:#%' THEN '1240' 
        end 
from hd_ticket hd 
where hd.hd_status_id = 1 
    and hd.title  like '%#:0[2345678]0:#%' 

Если ваша реализация Sql не поддерживает классы символов, как маски, вам нужно сделать что-то вроде этого:

where hd.hd_status_id = 1 
    and ( hd.title like '%#:020:#%' 
     OR hd.title like '%#:030:#%' 
     OR hd.title like '%#:040:#%' 
     OR hd.title like '%#:050:#%' 
     OR hd.title like '%#:060:#%' 
     OR hd.title like '%#:070:#%' 
     OR hd.title like '%#:080:#%' 
    ) 

Если вы» Реализация SQL SQL поддерживает регулярное выражение (например, Oracle), тогда вы можете использовать регулярное выражение для более кратким.

+0

Он не любит массив в инструкции LIKE. Я попробовал следующую Конкатенацию, но ей это не нравится: Где HD_STATUS_ID = 1 И HD_TICKET.TITLE LIKE '% #: 0' + [2345678] + '0: #%' – detailedMischief

+0

Это не массив: это * знак класс *. См. Мой исправленный ответ на альтернативы. –

+0

Спасибо! Просто нужно настроить несколько вещей, чтобы закончить то, что я делаю. То, что я пытаюсь сделать, - это генерировать электронную почту, если для определенной группы, в зависимости от значений хэша. Поэтому я ищу хэш при сохранении билета, проверяя этот билет на эти значения и устанавливая его в правильный отдел. – detailedMischief