【问题标题】:group by with (-) operator in oracle queryoracle查询中使用(-)运算符分组
【发布时间】:2016-11-30 08:54:54
【问题描述】:

我在下面有一个这样的查询。有 (-) 运算符 = (AA.SOURCE_CREDIT - BB.SOURCE_DEBIT / 1.1)。我想按 BR.AREA_ID 分组。只需 BR.AREA_ID。但它给了我错误:

ORA-00979: 不是 GROUP BY 表达式

我必须在 group by 中添加 AA.SOURCE_CREDIT 和 BB.SOURCE_DEBIT。但结果变得不是我想要的。只是我想要的 AREA_ID。

 SELECT   'SALES EU' AS DESCRIPTION,
           (AA.SOURCE_CREDIT - BB.SOURCE_DEBIT / 1.1) AS amount,
           BR.AREA_ID
    FROM            VI_REPORT_BK_PENJUALAN BK
                 JOIN
                    MST_BRANCH BR
                 ON BR.BRANCH_ID = BK.BRANCH_ID
              LEFT OUTER JOIN
                 (SELECT   JH.JOURNAL_NO, JD.SOURCE_CREDIT
                    FROM         TRX_JOURNAL_GL_HEADER JH
                              JOIN
                                 TRX_JOURNAL_GL_DETAIL JD
                              ON JH.JOURNAL_NO = jd.JOURNAL_NO
                           JOIN
                              TRX_DELIVERY_CONFIRMATION DC
                           ON DC.DELIVERY_NO = JH.DOCUMENT_NO
                   WHERE   JD.SOURCE_TYPE = '40100000') AA
              ON (AA.JOURNAL_NO = BK.JOURNAL_NO)
           LEFT OUTER JOIN
              (SELECT   JH.JOURNAL_NO, JD.SOURCE_DEBIT
                 FROM         TRX_JOURNAL_GL_HEADER JH
                           JOIN
                              TRX_JOURNAL_GL_DETAIL JD
                           ON JH.JOURNAL_NO = jd.JOURNAL_NO
                        JOIN
                           TRX_DELIVERY_CONFIRMATION DC
                        ON DC.DELIVERY_NO = JH.DOCUMENT_NO
                WHERE   JD.SOURCE_TYPE = '40502002') BB
           ON (BB.JOURNAL_NO = BK.JOURNAL_NO)
GROUP BY   BR.AREA_ID, AA.SOURCE_CREDIT, BB.SOURCE_DEBIT

我已经尝试在子查询中进行分组。但还是不行。我也在谷歌浏览,但我没有找到像我这样的案例。

【问题讨论】:

  • 一般的 GROUP BY 规则说:如果指定了 GROUP BY 子句,则 SELECT 列表中的每个列引用必须要么标识一个分组列,要么是一个集合函数的参数!
  • 那么在我的情况下我必须使用什么?或者给我任何关键字的想法来找到我的案例来探索它。非常感谢
  • 如果一个 BR.AREA_ID 在 JOIN 之后有几个(不同的)AA.SOURCE_CREDIT、BB.SOURCE_DEBIT 值,你想用它们做什么?全部显示,还是求和?
  • 非常感谢您的回复。我已经在下面找到了我需要的答案.. :D

标签: sql oracle plsql


【解决方案1】:

tf 每行的行数多于一行,您希望查询返回什么? 示例:

AREA_ID | AA.SOURCE_CREDIT | BB.SOURCE_DEBIT
   1    |      100         |       50
   1    |       70         |       50

如果您确定每个区域 id 只有一行,那么您可以使用 SUM、MAX、AVG 或其他任何值。

SELECT   'SALES EU' AS DESCRIPTION,
           (MAX(AA.SOURCE_CREDIT) - MAX(BB.SOURCE_DEBIT) / 1.1) AS amount,
           BR.AREA_ID
...

如果可能有更多结果,您应该决定哪种聚合函数最适合。

【讨论】:

  • hoooo 非常感谢你。在我的情况下只有一排。这就是我要的。非常感谢:D
猜你喜欢
  • 2016-11-16
  • 2013-05-28
  • 2013-10-11
  • 1970-01-01
  • 2020-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-13
相关资源
最近更新 更多