2016-11-30 2 views
0

У меня есть запрос, как показано ниже. Существует (-) operator = (AA.SOURCE_CREDIT - BB.SOURCE_DEBIT/1.1). Я хочу группировать BR.AREA_ID. Просто BR.AREA_ID. Но он дал мне ошибку:группа с (-) оператором в запросе оракула

ORA-00979: not a GROUP BY expression

И я должен добавить 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 

Я уже пытаюсь сделать группу внутри суб-запроса. Но все равно не работает. Я просматриваю также в google, но я не нашел случай, как мой случай.

+2

Общее правило GROUP BY гласит: если указано предложение GROUP BY, каждая ссылка столбца в списке SELECT должна либо идентифицировать столбец группировки, либо быть аргументом функции набора! – jarlh

+0

, так что я должен использовать в своем случае? или дать мне какое-либо представление о ключевом слове, чтобы узнать о моем случае, чтобы изучить его. Большое вам спасибо –

+0

Если у BR.AREA_ID есть несколько (разных) значений AA.SOURCE_CREDIT, BB.SOURCE_DEBIT после JOIN, что вы хотите с ними делать? Показать все или суммировать их? – jarlh

ответ

1

tf есть больше строк, чем по одному для каждой строки, что вы ожидаете от запроса? Пример:

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

Это вы уверены, что есть только одна строка для каждой области идентификатора, так что вы можете использовать SUM, MAX, AVG или что-нибудь еще.

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

Если может быть больше результатов, вы должны решить, какая функция Aggregate подходит лучше всего.

+0

hooooo большое спасибо. В моем случае только одна строка. это то, что я хочу. большое вам спасибо: D –