2016-05-31 56 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

非常感谢! –