2017-09-02 67 views
0

假設我有一個表「的Emp」如何檢查特定組中的每個值並設置標誌狀態?

Dpt_ID | E_ID | E_Status 

A1 | 00200 | H 
A1 | 00200 | M 
A1 | 00400 | H 
A1 | 00400 | M 
A2 | 00300 | L 
A2 | 00300 | M 
A2 | 00400 | L 
A2 | 00400 | L 

數據需要根據Dpt_ID到分組,如果該Dpt_ID下任何E_ID具有狀態= H,則設置標誌=高。同樣,如果該Dpt_ID下的任何E_ID的狀態爲M,則設置標誌=中等否則爲低。

目前,我已經寫了下面的查詢,但與功能組將檢查僅第1行:

SELECT Dpt_ID,E_ID,E_Status,(CASE 
      WHEN E_Status = "H" THEN 'High' 
      WHEN E_Status = "M" THEN 'Medium' 
      ELSE 'Low' 
      END) AS Flag 
FROM Emp 
group by Dpt_ID 

如何在Dpt_ID組檢查每個值,看它是否是H/M/L?

例如目標應顯示爲

Dpt_ID | Flag 

A1 | High 
A2 | Medium 

回答

0

這裏的問題是,因爲你有任意字符值,您不能使用MAX()直接,一個選擇是一個分配權重,以自己的價值觀,所以你可以使用MAX(),然後拿到標誌使用重量值:

SELECT Dpt_ID, 
    CASE MAX(CASE E_Status WHEN 'H' THEN 2 WHEN 'M' THEN 1 ELSE 0 END) 
     WHEN 2 THEN 'High' WHEN 1 THEN 'Medium' ELSE 'Low' END AS Flag 
FROM Emp 
group by Dpt_ID 
0

您已接近。你可以這樣做:

SELECT Dpt_ID, E_ID, E_Status, 
     (CASE WHEN MAX(E_Status = 'H') THEN 'High' 
      WHEN MAX(E_Status = 'M') THEN 'Medium' 
      ELSE 'Low' 
     END) AS Flag 
FROM Emp 
GROUP BY Dpt_ID;