【问题标题】:Select data depend with IF ELSE condition选择数据取决于 IF ELSE 条件
【发布时间】:2016-10-05 23:09:38
【问题描述】:

我有一个查询如下:

SELECT R.*
FROM 
(
    WITH TABLE_X AS
    (
        SELECT A,B,C FROM Y
    )

    --PSEUDO CODE
     IF (COUNT(TABLE_X.*) > 0)
        THEN SELECT CONCAT(A ,B, C) FROM TABLE_X
     ELSE 'No Data'
     END
) R

在这种情况下,如果 TABLE_X 有数据,则选择将返回 A,B,C。以其他方式,这将返回诸如“无数据”之类的其他内容。

请帮助我澄清并提出一些解决方案。 感谢您的关注。

【问题讨论】:

  • 作为一个起点,考虑一个查询可以返回固定数量的列。你需要这个查询做什么?是某种报表,一个简单的检查查询,是否需要在某个变量中返回数据?请尝试更详细。
  • 此查询将返回固定数量的列。此查询用于报告。它返回没有变量的数据。

标签: oracle oracle11g oracle-sqldeveloper oracle12c


【解决方案1】:

如果TABLE_X最多只有一行,那么可以使用聚合:

WITH TABLE_X AS (
      SELECT A, B, C FROM Y
    )
SELECT (CASE WHEN COUNT(*) = 0 THEN 'No Data'
             ELSE MAX(A || B || C)
        END) as col
FROM TABLE_X;

或者,使用UNION ALL:

WITH TABLE_X AS (
      SELECT A, B, C FROM Y
    )
SELECT A || B || C as col
FROM TABLE_X
UNION ALL
SELECT 'No Data'
FROM Dual
WHERE NOT EXISTS (SELECT 1 FROM TABLE_X);

【讨论】:

    【解决方案2】:

    看起来你也查询我认为你只需要

     select  nvl( A||B,||C , 'No data') 
     from y
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多