2014-10-17 27 views
-1

以下是我的腳本:SQL CASE:如果2個不同的列=東西,那麼第3列=東西; IF [A] =和[B] = B,則[C] = C

SELECT 
    * 
    ,CASE WHEN (Confirmed = 'YES' AND R.Performed IS NULL AND (R.Name NOT LIKE 'C%' OR R.Name NOT LIKE 'Q%')) 
      THEN s.Description = 'CONFIRMED' 
    END 
FROM 
    Repair r 
INNER JOIN 
    Conversion C 
ON 
    R.Confirmed = C.confirmed 
AND 
    r.performed = c.performed 
INNER JOIN 
    Status s 
ON 
    a.name = s.name 
WHERE 
    Status = 'CONFIRMED' 
AND 
    Received BETWEEN '01-31-2013' AND '12-31-2013' 
and part = '4' 

注:我有點發紅SQUIGGLIES的情況下最後'=''END'下聲明。

我的語法有什麼問題?

+0

你爲什麼值分配給s.Description?你正在嘗試更新嗎? – hatchet 2014-10-17 22:58:47

+0

,因爲我寫了一個SSIS包,並且有很多缺少的數據...通常我測試執行並確認哪個是描述值的依賴項。一些執行數據丟失,這意味着描述將爲空。如果我的案例中的規則是真的,那麼我需要使描述屬性得到確認 – 2014-10-17 23:01:03

+2

「THEN」之後,你必須有一個表達式,而不是一個賦值。 – hatchet 2014-10-17 23:02:06

回答

0

我不是你想什麼來完成,但是這樣的事情是,你可能需要什麼

,CASE WHEN (Confirmed = 'YES' AND R.Performed IS NULL 
      AND (R.Name NOT LIKE 'C%' OR R.Name NOT LIKE 'Q%')) 
THEN 'CONFIRMED' ELSE s.Description END AS Description 

,如果你只是想改變的值說明確認=「YES」時那麼清晰以下將工作

,CASE WHEN Confirmed = 'YES' THEN 'CONFIRMED' ELSE s.Description END AS Description 

您還需要不使用SELECT *,並且具有每列分別列出所以Description不會在選擇中出現兩次。我不確定爲什麼s.Description IS NULL AND ...不是您的CASE條件的一部分,如果您要填寫缺少的描述。

+0

這仍然不起作用。當其他列爲真時,我需要s.Description列='CONFIRMED'。 – 2014-10-17 23:10:17

+0

您能否在您的問題中添加更多內容,以準確描述何時應該「確認」說明以及何時應保持其現有價值。我只是從你的問題中複製了條件,所以我認爲那是你想要的。 – hatchet 2014-10-17 23:13:09

+0

只是爲了簡單...'當[確認] ='是'然後[s.Description] ='確認' – 2014-10-17 23:16:34

0

您的CASE聲明應如下所示。您正在收到錯誤,因爲您正在嘗試將descriptions.Description = 'CONFIRMED'添加爲不允許的值。

CASE WHEN (Confirmed = 'YES' AND R.Performed IS NULL 
AND (R.Name NOT LIKE 'C%' OR R.Name NOT LIKE 'Q%')) 
THEN 'CONFIRMED' END AS Description 
+0

我試圖讓s.Description列='確認'給予CASE聲明中的其他規則。這在查詢中是不允許的? – 2014-10-17 23:12:33

+0

這是不可能的,因爲你正在執行'SELECT'而不是'INSERT'或'UPDATE'。 – Rahul 2014-10-17 23:13:08

+0

會插入更改記錄嗎?這不是我想要的...只是爲我的ssis包 – 2014-10-17 23:14:54

0

試圖跟隨你真正想要什麼,它很難,但我覺得你想要的東西,如:

SELECT r.confirmed 
     ,r.status 
     ,a.name 
     ,<other fields> 
     ,CASE WHEN ( Confirmed = 'YES' 
        AND R.Performed IS NULL 
        AND ( R.Name NOT LIKE 'C%' 
         OR R.Name NOT LIKE 'Q%') 
       ) 
      THEN 'CONFIRMED' 
      ELSE s.Description 
     END AS Description 
FROM <your joined and filtered tables> 

的想法是,我認爲,你需要改變s.description只此選擇查詢的輸出,不在源表中。

0

試試這個

CASE s.Description WHEN (Confirmed = 'YES' AND R.Performed IS NULL AND (R.Name NOT LIKE 'C%' OR R.Name NOT LIKE 'Q%')) 
      THEN 'CONFIRMED' 
    END 

我不使用其他部分,因爲你沒有使用你的代碼,它不會造成任何語法錯誤

相關問題