2015-10-05 29 views
0

我試圖創建一個CASE,我可以檢查一個獨特的散列值,該值將設置新的所有者,具體取決於票證創建期間哪些散列值匹配。以下是我目前有:SQL WHERE CASE檢查散列值

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實現支持正則表達式(如Oracle),那麼你可以使用正則表達式來更簡潔。

+0

它不喜歡LIKE語句中的數組。 我試過以下連接,但它不喜歡這個: 其中HD_STATUS_ID = 1 AND HD_TICKET.TITLE LIKE'%#:0'+ [2345678] +'0:#%' – detailedMischief

+0

這不是一個數組:它是一個數組*角色類*。看到我的修改答案的替代品。 –

+0

謝謝!只需要調整幾件事就可以完成我正在做的事情。我想要做的是根據哈希值生成一個電子郵件,如果到一個特定的組。所以我在保存故障單時搜索散列,根據這些值檢查故障單並將其設置到正確的部門。 – detailedMischief