对不同的值进行分组

时间:2014-07-31 17:20:00

标签: sql

带有值的表:

Id  Val1  Val2
1   111    1
2   101    2
3          3
4   120    1
5   121 

它有这些限制:

  • Val2只能有三个值(1,2,3)。

  • Val1可以包含许多不同的值,包括null,但不包括1,2或3。

我想选择不同的val1,val2值,但有以下例外:

  1. 如果Val1nullVal2不为1,则我将Val1设为999

  2. 如果Val1nullVal2为1,则我将Val1设置为999,不要选择Val2

  3. 如果Val1 is not null , and Val2 is 1, then I select Val2`。

  4. 结果应该是(如果val1具有空值,并且val2具有1):

    111
    101
    120
    999 (null value set to 999)
    121
    2
    3
    

    结果应该是(如果val1没有' t空值,val2有1):

    111
    101
    120
    121
    1
    2
    3
    

    结果应该是(如果val1具有空值,而val2没有1):

    111
    101
    999 (null value1 set to 999)
    120
    121
    2
    3
    

2 个答案:

答案 0 :(得分:1)

使用Coalesce,它将检查该值是否为null并替换为其他内容:

http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_coalesce

要检查是否应使用val1或val2,请使用IF:

http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html#function_if

例如,第一步是:

SELECT COALESCE(val1,999) from table1;

答案 1 :(得分:1)

这是你想要的吗?

select distinct coalesce(val, 999)
from ((select val1 as val from tablewithvalues) union all
      (select val2 from tablewithvalues)
     ) twv;