我的子查询分解 (WITH) 子句出错

Error in my Subquery Factoring (WITH) Clause

我在 运行 这个脚本时出错 :

WITH q AS (
  SELECT COUNT(id)
  FROM   test
  )
SELECT 1, 
  CASE 
    WHEN q=0 then 'toto'
    ELSE 'titi'
  END

FROM   dual;

我必须使用子查询分解 (WITH) 子句。

我的想法是当计数等于 0 时显示 'toto',否则我必须显示 'titi'

为结果使用别名,FROM q

WITH q AS (
  SELECT COUNT(id) as total
  FROM   test
  )
SELECT 1, 
  CASE 
    WHEN q.total = 0 THEN 'toto'
    ELSE 'titi'
  END

FROM   q;

您可以将其简化为:

SELECT 1, 
       CASE COUNT(*) WHEN 0 then 'toto' ELSE 'titi' END
FROM   test;

您的查询中的错误是您创建了一个命名子查询 q,但随后您从 DUAL table 中选择了列 q(这确实没有列 q).

您可以这样修正您的查询:

WITH q AS (
  SELECT COUNT(id) AS cnt -- name this column
  FROM   test
)
SELECT 1, 
       CASE WHEN cnt = 0 -- use the column you named previously
            THEN 'toto'
            ELSE 'titi'
            END
FROM   q; -- use the named subquery q not the dual table