Я застрял с проблемой SQL. Не могли бы вы помочь мне со следующим:
В настоящее время у меня есть SQL, который извлекает данные на основе различных таблиц и объединенных значений.
Я должен ограничить выбор данных, проверив, совпадают ли части составных значений, и выполнить расчет, чтобы определить, должна ли эта группа записей отображаться или нет.
Пример данных:
ID Acct ID Credit Debit Balance
1 10.1.2.3 -10 0 10
2 10.5.2.4 0 10 10
3 22.6.1.1 0 -15 -15
4 11.3.5.5 -5 0 -5
5 12.3.5.6 -2 0 -2
6 15.1.1.1 30 0 30
7 20.16.5.1 0 7 7
Часть сцепленного, чтобы принять во внимание является третьим значением. (Используемый разделитель: ".")
- Для идентификаторов 1 и 2 третье значение объединенного поля - «2», что соответствует первому критерию.
Затем для двух строк записей сумма кредита и дебета суммируется до нуля, что соответствует второму критерию. Следовательно, ID 1 и 2 не должны отображаться.
То же самое для идентификаторов 4, 5 и 7, третье объединенное значение одинаково, то есть "5", сумма кредита и дебета суммируется до нуля. Они не должны быть выбраны в запросе SQL.
ID 3 и 6 имеют одно и то же третье каскадное значение, но сумма не равна нулю, поэтому эти две строки должны отображаться.
Не могли бы вы помочь мне с вышесказанным? Обратите внимание, что я уже знаю, как получить только 3-е значение объединенного поля.
Заранее большое спасибо.
Ответ:
Здравствуйте, большое спасибо, похоже, он работает для предоставленного вами фрагмента кода, однако я все еще не могу заставить его работать с моим SQL.
Текущий SQL:
SELECT Hca.ACCOUNT_NAME "Customer Name"
,hca.ACCOUNT_NUMBER "Account Number"
,AR_TRX_H.TRX_NUMBER "Invoice Number/Credit Memo"
,TO_CHAR(AR_TRX_GL.GL_DATE, 'DD/MM/YYYY') "Accounting Date"
,GLCC.SEGMENT1 || '.' || GLCC.SEGMENT2 || '.' || GLCC.SEGMENT3 || '.' || GLCC.SEGMENT4 || '.' || GLCC.SEGMENT5 || '.' || GLCC.SEGMENT6 || '.' || GLCC.SEGMENT7 || '.' || GLCC.SEGMENT8 || '.' || GLCC.SEGMENT9 AS "Concatenated Segments"
,XLA_L.ACCOUNTED_DR
,XLA_L.ACCOUNTED_CR
,
--XLA_L.ACCOUNTED_CR-XLA_L.ACCOUNTED_DR "Balances"
decode(XLA_L.ACCOUNTED_CR, NULL, 0, XLA_L.ACCOUNTED_CR) - decode(XLA_L.ACCOUNTED_DR, NULL, 0, XLA_L.ACCOUNTED_DR) "Balances"
,
FROM hz_cust_accounts hca
,RA_CUSTOMER_TRX_ALL AR_TRX_H
,RA_CUST_TRX_LINE_GL_DIST_ALL AR_TRX_GL
,GL_CODE_COMBINATIONS GLCC
,XLA_AE_HEADERS XLA_H
,XLA_AE_LINES XLA_L
WHERE 1 = 1
AND HCA.CUST_ACCOUNT_ID = AR_TRX_H.BILL_TO_CUSTOMER_ID
AND AR_TRX_H.CUSTOMER_TRX_ID = AR_TRX_GL.CUSTOMER_TRX_ID
AND AR_TRX_GL.ACCOUNT_CLASS = 'REV'
AND AR_TRX_GL.CODE_COMBINATION_ID = GLCC.CODE_COMBINATION_ID
AND AR_TRX_GL.EVENT_ID = XLA_H.EVENT_ID
AND AR_TRX_GL.SET_OF_BOOKS_ID = XLA_H.LEDGER_ID
AND XLA_H.AE_HEADER_ID = XLA_L.AE_HEADER_ID
AND XLA_L.CODE_COMBINATION_ID = AR_TRX_GL.CODE_COMBINATION_ID
AND GLCC.SEGMENT2 LIKE '419%'
AND GLCC.SEGMENT1 || '.' || GLCC.SEGMENT2 || '.' || GLCC.SEGMENT3 || '.' || GLCC.SEGMENT4 || '.' || GLCC.SEGMENT5 || '.' || GLCC.SEGMENT6 || '.' || GLCC.SEGMENT7 || '.' || GLCC.SEGMENT8 || '.' || GLCC.SEGMENT9 IN (
SELECT GLCC.SEGMENT1 || '.' || GLCC.SEGMENT2 || '.' || GLCC.SEGMENT3 || '.' || GLCC.SEGMENT4 || '.' || GLCC.SEGMENT5 || '.' || GLCC.SEGMENT6 || '.' || GLCC.SEGMENT7 || '.' || GLCC.SEGMENT8 || '.' || GLCC.SEGMENT9 AS "Concatenated"
FROM hz_cust_accounts hca1
,RA_CUSTOMER_TRX_ALL AR_TRX_H
,RA_CUST_TRX_LINE_GL_DIST_ALL AR_TRX_GL
,GL_CODE_COMBINATIONS GLCC
,XLA_AE_HEADERS XLA_H
,XLA_AE_LINES XLA_L
WHERE 1 = 1
AND HCA1.CUST_ACCOUNT_ID = AR_TRX_H.BILL_TO_CUSTOMER_ID
AND AR_TRX_H.CUSTOMER_TRX_ID = AR_TRX_GL.CUSTOMER_TRX_ID
AND AR_TRX_GL.ACCOUNT_CLASS = 'REV'
AND AR_TRX_GL.CODE_COMBINATION_ID = GLCC.CODE_COMBINATION_ID
AND AR_TRX_GL.EVENT_ID = XLA_H.EVENT_ID
AND AR_TRX_GL.SET_OF_BOOKS_ID = XLA_H.LEDGER_ID
AND XLA_H.AE_HEADER_ID = XLA_L.AE_HEADER_ID
AND XLA_L.CODE_COMBINATION_ID = AR_TRX_GL.CODE_COMBINATION_ID
AND GLCC.SEGMENT2 LIKE '419%'
GROUP BY GLCC.SEGMENT1 || '.' || GLCC.SEGMENT2 || '.' || GLCC.SEGMENT3 || '.' || GLCC.SEGMENT4 || '.' || GLCC.SEGMENT5 || '.' || GLCC.SEGMENT6 || '.' || GLCC.SEGMENT7 || '.' || GLCC.SEGMENT8 || '.' || GLCC.SEGMENT9
)
Обратите внимание, что это Сегмент6, который является значением, используемым из объединенных значений.
После попытки добавить предоставленную вами логику:
WITH base_data
AS (
SELECT Hca.ACCOUNT_NAME "Customer Name"
,hca.ACCOUNT_NUMBER "Account Number"
,AR_TRX_H.TRX_NUMBER "Invoice Number/Credit Memo"
,TO_CHAR(AR_TRX_GL.GL_DATE, 'DD/MM/YYYY') "Accounting Date"
,GLCC.SEGMENT1 || '.' || GLCC.SEGMENT2 || '.' || GLCC.SEGMENT3 || '.' || GLCC.SEGMENT4 || '.' || GLCC.SEGMENT5 || '.' || GLCC.SEGMENT6 || '.' || GLCC.SEGMENT7 || '.' || GLCC.SEGMENT8 || '.' || GLCC.SEGMENT9 AS "Concatenated Segments"
,XLA_L.ACCOUNTED_DR AS CREDIT
,XLA_L.ACCOUNTED_CR AS DEBIT
,decode(XLA_L.ACCOUNTED_CR, NULL, 0, XLA_L.ACCOUNTED_CR) - decode(XLA_L.ACCOUNTED_DR, NULL, 0, XLA_L.ACCOUNTED_DR) "Balances"
,
--Segment 6 is the value to group in order to check the amount
GLCC.SEGMENT6 AS segment6
FROM hz_cust_accounts hca
,RA_CUSTOMER_TRX_ALL AR_TRX_H
,RA_CUST_TRX_LINE_GL_DIST_ALL AR_TRX_GL
,GL_CODE_COMBINATIONS GLCC
,XLA_AE_HEADERS XLA_H
,XLA_AE_LINES XLA_L DUAL
UNION ALL
)
SELECT *
FROM (
SELECT A.*
,sum(A.DEBIT + A.CREDIT) OVER (PARTITION BY A.segment6) AS extr_ID_balance
FROM base_data A
)
WHERE extr_ID_balance <> 0
AND HCA.CUST_ACCOUNT_ID = AR_TRX_H.BILL_TO_CUSTOMER_ID
AND AR_TRX_H.CUSTOMER_TRX_ID = AR_TRX_GL.CUSTOMER_TRX_ID
AND AR_TRX_GL.ACCOUNT_CLASS = 'REV'
AND AR_TRX_GL.CODE_COMBINATION_ID = GLCC.CODE_COMBINATION_ID
AND AR_TRX_GL.EVENT_ID = XLA_H.EVENT_ID
AND AR_TRX_GL.SET_OF_BOOKS_ID = XLA_H.LEDGER_ID
AND XLA_H.AE_HEADER_ID = XLA_L.AE_HEADER_ID
AND XLA_L.CODE_COMBINATION_ID = AR_TRX_GL.CODE_COMBINATION_ID
AND GLCC.SEGMENT2 LIKE '419%'
AND GLCC.SEGMENT1 || '.' || GLCC.SEGMENT2 || '.' || GLCC.SEGMENT3 || '.' || GLCC.SEGMENT4 || '.' || GLCC.SEGMENT5 || '.' || GLCC.SEGMENT6 || '.' || GLCC.SEGMENT7 || '.' || GLCC.SEGMENT8 || '.' || GLCC.SEGMENT9 IN (
SELECT GLCC.SEGMENT1 || '.' || GLCC.SEGMENT2 || '.' || GLCC.SEGMENT3 || '.' || GLCC.SEGMENT4 || '.' || GLCC.SEGMENT5 || '.' || GLCC.SEGMENT6 || '.' || GLCC.SEGMENT7 || '.' || GLCC.SEGMENT8 || '.' || GLCC.SEGMENT9 AS "Concatenated"
FROM hz_cust_accounts hca1
,RA_CUSTOMER_TRX_ALL AR_TRX_H
,RA_CUST_TRX_LINE_GL_DIST_ALL AR_TRX_GL
,GL_CODE_COMBINATIONS GLCC
,XLA_AE_HEADERS XLA_H
,XLA_AE_LINES XLA_L
WHERE 1 = 1
AND HCA1.CUST_ACCOUNT_ID = AR_TRX_H.BILL_TO_CUSTOMER_ID
AND AR_TRX_H.CUSTOMER_TRX_ID = AR_TRX_GL.CUSTOMER_TRX_ID
AND AR_TRX_GL.ACCOUNT_CLASS = 'REV'
AND AR_TRX_GL.CODE_COMBINATION_ID = GLCC.CODE_COMBINATION_ID
AND AR_TRX_GL.EVENT_ID = XLA_H.EVENT_ID
AND AR_TRX_GL.SET_OF_BOOKS_ID = XLA_H.LEDGER_ID
AND XLA_H.AE_HEADER_ID = XLA_L.AE_HEADER_ID
AND XLA_L.CODE_COMBINATION_ID = AR_TRX_GL.CODE_COMBINATION_ID
AND GLCC.SEGMENT2 LIKE '419%'
GROUP BY GLCC.SEGMENT1 || '.' || GLCC.SEGMENT2 || '.' || GLCC.SEGMENT3 || '.' || GLCC.SEGMENT4 || '.' || GLCC.SEGMENT5 || '.' || GLCC.SEGMENT6 || '.' || GLCC.SEGMENT7 || '.' || GLCC.SEGMENT8 || '.' || GLCC.SEGMENT9
)
Благодарен, если вы можете помочь с вышеупомянутым.
Спасибо!