2016-05-31 82 views
0

我需要把一個函數的最小值,如果最小值他穿上0 virtal列,如果沒有,將1選擇一個功能的MIN,並創建一個虛擬表

SELECT ID, Name, (X + Y) AS TOTAL, MIN(TOTAL) AS MINVALUE FROM TABLE 

ID Name TOTAL MINVALUE 
    1  item 22  0 
    1  item 33  1 
    1  item 50  1 
    2  item2 200  1 
    2  item2 30  0 
+0

你需要一個子選擇。 min()是一個聚合函數,並且只能在整個結果集可用時才能工作,但是您以每行爲基礎使用它,因此每行都會自動同時使用它自己的最大/最小值。 '選擇min(總數)from(選擇x + y作爲總數...)作爲foo' –

回答

3

你做到這一點使用窗口功能和case

select id, name, (x + y) as total, 
     (case when (x + y) = min(x + y) over (partition by id) 
      then 0 else 1 
     end) as IsNotMinValue 
from t; 

我通常遵循Unix約定Ø f「0」爲假,「1」(實際不爲「0」)爲真。因此,我將國旗命名爲IsNotMinValue,因爲這是我將如何解釋它。

+1

total不是一列,但是這應該很容易修復並應該工作 – JamieD77

+0

@ JamieD77。 。 。謝謝。 –

+0

非常感謝! –