【问题标题】:Grouping distinct values对不同的值进行分组
【发布时间】:2014-08-01 01:47:43
【问题描述】:

带值的表:

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. 如果Val1null 并且Val2 不是1,那么我将Val1 设置为999

  2. 如果Val1null,而Val2是1,那么我将Val1设置为999,不选择Val2

  3. 如果Val1 is notnull, andVal2is 1, then I selectVal2`。

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

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

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

111
101
120
121
1
2
3

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

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

【问题讨论】:

  • 也许你也应该显示结果表的样子,因为你想要的描述是一团糟。
  • @Coda17 有它,格式化一个预期的结果表,就像你有你的价值观一样。包括您尝试过的 sql 和 sql fiddle 也不会受到伤害。

标签: sql


【解决方案1】:

这是你想要的吗?

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

【讨论】:

    【解决方案2】:

    使用 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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-24
      • 1970-01-01
      • 2021-04-20
      • 1970-01-01
      • 2020-08-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多