SQL Case Statement Если Null, выберите столбцы из таблицы X, где Y = Z - PullRequest
0 голосов
/ 01 мая 2018

Я пытаюсь написать собственный отчет, в котором счета будут иметь номер заказа в столбце PO_Number или не будут.

Если у них нет номера заказа, я ищу данные из 4 столбцов (Сегмент1, Сегмент2, Сегмент3 и Сегмент4), где 2 идентификатора совпадают. В том же заявлении, если есть номер заказа на поставку, я хочу вытащить те же 4 столбца, но там, где совпадают 2 разных идентификационных номера.

SQL у меня до сих пор:

SELECT DISTINCT
AID.INVOICE_ID,
AID.AMOUNT,
AID.PERIOD_NAME,
GCC.SEGMENT1 as Organisation,
GCC.SEGMENT2,
GCC.SEGMENT3,
GCC.SEGMENT4,
INV.INVOICE_NUM,
INV.CREATION_DATE,
PO.SEGMENT1 as PO_Number,
SUP.VENDOR_NAME,
AID.LINE_TYPE_LOOKUP_CODE,
LINES.LINE_NUMBER


FROM
AP_INVOICES_All INV 
INNER JOIN
  AP_INVOICE_LINES_ALL LINES 
  ON INV.INVOICE_ID = LINES.INVOICE_ID 
INNER JOIN
  AP_INVOICE_DISTRIBUTIONS_ALL AID 
  ON INV.INVOICE_ID = AID.INVOICE_ID 
INNER JOIN
  GL_CODE_COMBINATIONS GCC 
  ON AID.DIST_CODE_COMBINATION_ID = GCC.CODE_COMBINATION_ID 
INNER JOIN
  POZ_SUPPLIERS_V SUP 
  ON INV.VENDOR_ID = SUP.VENDOR_ID 
LEFT JOIN
  PO_HEADERS_ALL PO 
  ON LINES.PO_HEADER_ID = PO.PO_HEADER_ID

WHERE
AID.LINE_TYPE_LOOKUP_CODE NOT IN 
(
  'REC_TAX',
  'NONREC_TAX'
)
AND LINES.LINE_TYPE_LOOKUP_CODE NOT IN 
(
  'TAX'
)

ORDER BY
AID.INVOICE_ID,
LINES.LINE_NUMBER

Если есть PO, на котором я хочу провести матч:

PO_DISTRIBUTIONS_ALL.CODE_COMBINATION_ID = GCC.CODE_COMBINATION_ID

А если нет PO:

AID.DIST_CODE_COMBINATION_ID = GCC.CODE_COMBINATION_ID

(я знаю, что мне нужно где-то ссылаться на таблицу PO_DISTRIBUTIONS_ALL, но не знаю где)

Будет полезна любая помощь, поскольку я довольно плохо знаком с SQL и не знаю, как выразить то, чего я хочу достичь в коде SQL.

Дайте мне знать, если я не был ясен ни по какой части

1 Ответ

0 голосов
/ 01 мая 2018

Вы можете оставить соединение PO_DISTRIBUTION_ALL и создать условное соединение на GL_CODE_COMBINATIONS, например:

SELECT DISTINCT
AID.INVOICE_ID,
AID.AMOUNT,
AID.PERIOD_NAME,
GCC.SEGMENT1 as Organisation,
GCC.SEGMENT2,
GCC.SEGMENT3,
GCC.SEGMENT4,
INV.INVOICE_NUM,
INV.CREATION_DATE,
PO.SEGMENT1 as PO_Number,
SUP.VENDOR_NAME,
AID.LINE_TYPE_LOOKUP_CODE,
LINES.LINE_NUMBER
FROM AP_INVOICES_All INV 
INNER JOIN  AP_INVOICE_LINES_ALL LINES 
  ON INV.INVOICE_ID = LINES.INVOICE_ID 
INNER JOIN  AP_INVOICE_DISTRIBUTIONS_ALL AID 
  ON INV.INVOICE_ID = AID.INVOICE_ID 
LEFT JOIN PO_HEADERS_ALL PO 
  ON LINES.PO_HEADER_ID = PO.PO_HEADER_ID
LEFT JOIN PO_DISTRIBUTIONS_ALL PDA 
  ON PO.PO_HEADER_ID = PDA.PO_HEADER_ID
INNER JOIN  GL_CODE_COMBINATIONS GCC
  ON GCC.CODE_COMBINATION_ID = nvl(PDA.CODE_COMBINATION_ID, AID.DIST_CODE_COMBINATION_ID)
INNER JOIN
  POZ_SUPPLIERS_V SUP 
  ON INV.VENDOR_ID = SUP.VENDOR_ID 
WHERE AID.LINE_TYPE_LOOKUP_CODE NOT IN (  'REC_TAX',  'NONREC_TAX')
AND LINES.LINE_TYPE_LOOKUP_CODE NOT IN ('TAX')
ORDER BY
AID.INVOICE_ID,
LINES.LINE_NUMBER
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...