2017-03-02 74 views
1

請幫我解決這個問題。CASE語句中的SQL搜索腳本

SELECT 
    Username, 
    CASE 
     WHEN UserType = 'DUMMY' AND UserLoginId = Username THEN 'Awaiting_Approval' 
     WHEN UserType = 'DUMMY' AND UserLoginId != Username THEN 'Checking_Approval' 
     ELSE 'No_Status_Yet' 
    END AS UserStatus 
FROM MyTable 
WHERE UserStatus LIKE '%king%' 

我試圖通過數據庫中的文本創建簡單的搜索,所以我可以通過文本中間進行搜索。由於在那裏沒有狀態欄,我自己從2欄詳細信息的組合中創建它。誰能幫我。謝謝。

+0

這是一個CASE表達式,而不是一個case語句。 (返回一個值。) – jarlh

+0

你的邏輯對我來說毫無意義。 WHERE條款的目的是什麼? –

+0

添加一些示例表格數據和預期結果。 (以及格式化的文本。) – jarlh

回答

4

您不能在WHERE子句,請嘗試以下一個

SELECT * 
FROM (
    SELECT Username, 
      CASE 
       WHEN UserType = 'DUMMY' AND UserLoginId = Username THEN 'Awaiting_Approval' 
       WHEN UserType = 'DUMMY' AND UserLoginId != Username THEN 'Checking_Approval' 
       ELSE 'No_Status_Yet' 
      END AS UserStatus 
    FROM MyTable 
) AS D 
WHERE UserStatus LIKE '%king%' 
+2

是的,但這個查詢沒有意義。 –

+1

你可能會。我認爲這不是一個完整的查詢,可能是查詢的一個示例部分,用來顯示OP的場景。 –

+1

太棒了,謝謝。 – saf21

-1

您可以使用具有關鍵字直接使用一個別名(只能在MySQL):

SELECT 
    Username, 
    CASE 
     WHEN UserType = 'DUMMY' AND UserLoginId = Username THEN 'Awaiting_Approval' 
     WHEN UserType = 'DUMMY' AND UserLoginId != Username THEN 'Checking_Approval' 
     ELSE 'No_Status_Yet' 
     END AS UserStatus 
FROM MyTable 
HAVING UserStatus LIKE '%king%' 
+1

不是我的失望,但這個技巧可能只適用於MySQL(不是SQL Server)。 –

+0

你說得對,我添加了那個信息。 – ElChupacabra

0

作爲替代,您可以在WHERE子句中添加您的案例表達式。

SELECT 
    Username, 
    'Checking_Approval' AS UserStatus 
FROM MyTable 
WHERE 1 = CASE WHEN UserType = 'DUMMY' AND UserLoginId != Username THEN 1 
      --other conditions that should be returned here 
      ELSE 0 
      END