【问题标题】:What's wrong with this SQL query?这个 SQL 查询有什么问题?
【发布时间】:2011-01-15 03:55:54
【问题描述】:

以下查询返回“ORA-00904 错误:SATIS:标识符无效。”当我删除HAVING satis > 0 行时,它可以工作。我该怎么办?

SELECT donem, bolge_adi, sehir_tasra "1=Ş, 2=T", 
       COUNT(DISTINCT mekankodu) "M.SAYISI",
       SUM(b2b_dagitim + b2b_transfer - b2b_iade) satis
FROM mps_view2
WHERE donem IN ('200612','200712','200812','200912')
AND (ob IS NOT NULL OR b2b_ob IS NOT NULL)
GROUP BY donem, bolge_adi, sehir_tasra
HAVING satis > 0
ORDER BY donem, bolge_adi, sehir_tasra

【问题讨论】:

    标签: sql oracle ora-00904


    【解决方案1】:

    您不能在条件中使用别名(包含查询部分)

    试试这个:

    SELECT donem, bolge_adi, sehir_tasra "1=Ş, 2=T", 
       COUNT(DISTINCT mekankodu) "M.SAYISI",
       SUM(b2b_dagitim + b2b_transfer - b2b_iade) satis
    FROM mps_view2
    WHERE donem IN ('200612','200712','200812','200912')
          AND (ob IS NOT NULL OR b2b_ob IS NOT NULL)
    GROUP BY donem, bolge_adi, sehir_tasra
    HAVING SUM(b2b_dagitim + b2b_transfer - b2b_iade) > 0
    ORDER BY donem, bolge_adi, sehir_tasra
    

    【讨论】:

    • @Mehper:这条规则在 SQL Server 和 Oracle 中很常见。
    【解决方案2】:

    从这里开始:

    http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_10002.htm

    别名可用于 order_by_clause 但不是其他子句 在查询中。

    【讨论】:

      【解决方案3】:

      你需要改成

      SELECT donem, bolge_adi, sehir_tasra "1=Ş, 2=T",  
             COUNT(DISTINCT mekankodu) "M.SAYISI", 
             SUM(b2b_dagitim + b2b_transfer - b2b_iade) satis 
      FROM mps_view2 
      WHERE donem IN ('200612','200712','200812','200912') 
      AND (ob IS NOT NULL OR b2b_ob IS NOT NULL) 
      GROUP BY donem, bolge_adi, sehir_tasra 
      HAVING SUM(b2b_dagitim + b2b_transfer - b2b_iade) > 0
      ORDER BY donem, bolge_adi, sehir_tasra 
      

      您不能在 HAVING 子句中使用别名。

      【讨论】:

        猜你喜欢
        • 2010-10-21
        • 1970-01-01
        • 2015-08-08
        • 1970-01-01
        • 1970-01-01
        • 2011-09-28
        • 1970-01-01
        相关资源
        最近更新 更多