【问题标题】:SQL case statement in TeradataTeradata 中的 SQL 案例语句
【发布时间】:2013-08-18 05:18:42
【问题描述】:

我正在尝试在 Teradata 中编写一个简单的 IF/ELSE 语句。据我了解,您必须使用 CASE。我想要做的是编写一个语句来检查列是否为空并显示一些东西。 ELSE 如果为 NULL,则显示其他内容。

我发现的每个示例都只是用硬编码的字符串或 int 替换单个值。我正在寻找更多类似的东西,它使用 THEN 语句进行另一个 SELECT:

  SELECT CARS.VIN_NUM, CARS.DRIVER_NAMES
     CASE
       WHEN CARS.FUEL IS NOT NULL THEN SELECT CARS.DESTINATIONS
       WHEN CARS.FUEL IS NULL THEN SELECT CARS.GAS_STATIONS
     END
  FROM AUTOMOBILES CARS
  WHERE CARS.VIN_NUM IN
  ('345353',
   '354632',
   '535231')
  ORDER BY CARS.VIN_NUM

最终结果应该是一个根据 CASE 显示 VIN_NUM、DRIVER_NAMES、DESTINATIONS 或 GAS_STATIONS 的表格。像这样的事情是可能的还是我做错了?

【问题讨论】:

    标签: sql if-statement case teradata


    【解决方案1】:

    如果DESTINATIONSGAS_STATIONS 是表AUTOMOBILES(别名CARS)中的列,那么以下应该有效:

     SELECT CARS.VIN_NUM, 
            CARS.DRIVER_NAMES,
         CASE
           WHEN CARS.FUEL IS NOT NULL THEN CARS.DESTINATIONS
           ELSE CARS.GAS_STATIONS
         END
      FROM AUTOMOBILES CARS
      WHERE CARS.VIN_NUM IN
      ('345353',
       '354632',
       '535231')
      ORDER BY CARS.VIN_NUM;
    

    【讨论】:

    • 这可以进一步简化为:CASE WHEN CARS.FUEL IS NOT NULL THEN CARS.DESTINATIONS ELSE CARS.GAS_STATIONS END 或 COALESCE(CARS.GAS_STATIONS, CARS.DESTINATIONS)
    • 谢谢!在第一个 SELECT 语句之后,我也错过了一个共同点。
    猜你喜欢
    • 1970-01-01
    • 2018-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-19
    • 2011-05-05
    • 1970-01-01
    相关资源
    最近更新 更多