Проблема в том, что вы смешиваете синтаксисы соединения. Не используйте соединения старого стиля.
Если вы переформатируете свой код, вы увидите свою проблему.
SELECT
A.BUSINESS_UNIT,
D.DESCR,
(
CONVERT(CHAR(10), A.PO_DT, 121)
),
A.PO_ID,
A.VENDOR_ID,
B.LINE_NBR,
B.INV_ITEM_ID,
E.DESCR,
B.ITM_ID_VNDR,
B.CATEGORY_ID,
B.UNIT_OF_MEASURE,
B.MFG_ID,
B.MFG_ITM_ID,
C.MERCHANDISE_AMT,
C.QTY_PO,
C.MERCH_AMT_BSE,
C.ACCOUNT,
E.CATEGORY_ID,
F.DESCR60,
E.ITEM_FIELD_C10_A,
E.ITEM_FIELD_C10_B,
H.INVOICE_ID,
H.INVOICE_DT,
H.VOUCHER_ID
FROM
PS_PO_HDR A
LEFT OUTER JOIN
PS_VOUCHER_LINE G
ON A.PO_ID = G.PO_ID
AND A.BUSINESS_UNIT = G.BUSINESS_UNIT
AND G.LINE_NBR = B.LINE_NBR
LEFT OUTER JOIN
PS_VOUCHER H
ON G.VOUCHER_ID = H.VOUCHER_ID
AND G.BUSINESS_UNIT = H.BUSINESS_UNIT,
PS_PO_LINE B,
PS_PO_LINE_DISTRIB C,
PS_BUS_UNIT_TBL_FS D,
(
PS_MASTER_ITEM_TBL E
LEFT OUTER JOIN
PS_ITM_CAT_TBL F
ON E.SETID = F.SETID
AND F.CATEGORY_ID = E.CATEGORY_ID
)
WHERE
(
A.BUSINESS_UNIT = B.BUSINESS_UNIT
AND A.PO_ID = B.PO_ID
AND B.BUSINESS_UNIT = C.BUSINESS_UNIT
AND B.PO_ID = C.PO_ID
AND B.LINE_NBR = C.LINE_NBR
AND A.PO_DT BETWEEN '2018-12-05' AND '2018-12-12'
AND A.BUSINESS_UNIT = D.BUSINESS_UNIT
AND E.INV_ITEM_ID = B.INV_ITEM_ID
AND F.EFFDT =
(
SELECT
MAX(F_ED.EFFDT)
FROM
PS_ITM_CAT_TBL F_ED
WHERE
F.SETID = F_ED.SETID
AND F.CATEGORY_TYPE = F_ED.CATEGORY_TYPE
AND F.CATEGORY_CD = F_ED.CATEGORY_CD
AND F.CATEGORY_ID = F_ED.CATEGORY_ID
AND F_ED.EFFDT <= SUBSTRING(CONVERT(CHAR, GETDATE(), 121), 1, 10)
)
)
LEFT OUTER JOIN
PS_VOUCHER_LINE G
ON A.PO_ID = G.PO_ID
AND A.BUSINESS_UNIT = G.BUSINESS_UNIT **
AND G.LINE_NBR = B.LINE_NBR*
В самом низу вашего кода:
LEFT OUTER JOIN
PS_VOUCHER_LINE G
ON A.PO_ID = G.PO_ID
AND A.BUSINESS_UNIT = G.BUSINESS_UNIT **
AND G.LINE_NBR = B.LINE_NBR*
Предполагая, что *
на самом деле отсутствует в вашем коде (причина, которая также может вызвать проблемы), операторы JOIN
идут перед предложением WHERE
. Это после предложения WHERE
. Вы должны переместить его.
После изменения всего на явный синтаксис объединения и удаления некоторых фиктивных запятых и ненужных скобок, вот пример того, что вы хотите. Просто проверьте пункты JOIN
, где у меня есть комментарии.
SELECT
A.BUSINESS_UNIT,
D.DESCR,
(
CONVERT(CHAR(10), A.PO_DT, 121)
),
A.PO_ID,
A.VENDOR_ID,
B.LINE_NBR,
B.INV_ITEM_ID,
E.DESCR,
B.ITM_ID_VNDR,
B.CATEGORY_ID,
B.UNIT_OF_MEASURE,
B.MFG_ID,
B.MFG_ITM_ID,
C.MERCHANDISE_AMT,
C.QTY_PO,
C.MERCH_AMT_BSE,
C.ACCOUNT,
E.CATEGORY_ID,
F.DESCR60,
E.ITEM_FIELD_C10_A,
E.ITEM_FIELD_C10_B,
H.INVOICE_ID,
H.INVOICE_DT,
H.VOUCHER_ID
FROM
PS_PO_HDR A
LEFT OUTER JOIN
PS_VOUCHER_LINE G
ON A.PO_ID = G.PO_ID
AND A.BUSINESS_UNIT = G.BUSINESS_UNIT
AND G.LINE_NBR = B.LINE_NBR
LEFT OUTER JOIN
PS_VOUCHER H
ON G.VOUCHER_ID = H.VOUCHER_ID
AND G.BUSINESS_UNIT = H.BUSINESS_UNIT
/*BEGIN code taken from where clause */
LEFT OUTER JOIN
PS_PO_LINE B
ON A.BUSINESS_UNIT = B.BUSINESS_UNIT
AND A.PO_ID = B.PO_ID
LEFT OUTER JOIN
PS_PO_LINE_DISTRIB C
ON B.BUSINESS_UNIT = C.BUSINESS_UNIT
AND B.PO_ID = C.PO_ID
AND B.LINE_NBR = C.LINE_NBR
LEFT OUTER JOIN
PS_BUS_UNIT_TBL_FS D
ON A.BUSINESS_UNIT = D.BUSINESS_UNIT
LEFT OUTER JOIN
PS_MASTER_ITEM_TBL E
ON E.INV_ITEM_ID = B.INV_ITEM_ID
/*END code taken from where clause */
LEFT OUTER JOIN
PS_ITM_CAT_TBL F
ON E.SETID = F.SETID
AND F.CATEGORY_ID = E.CATEGORY_ID
LEFT OUTER JOIN
PS_VOUCHER_LINE G
ON A.PO_ID = G.PO_ID
AND A.BUSINESS_UNIT = G.BUSINESS_UNIT
AND G.LINE_NBR = B.LINE_NBR
WHERE
A.PO_DT BETWEEN '2018-12-05' AND '2018-12-12'
AND F.EFFDT =
(
SELECT
MAX(F_ED.EFFDT)
FROM
PS_ITM_CAT_TBL F_ED
WHERE
F.SETID = F_ED.SETID
AND F.CATEGORY_TYPE = F_ED.CATEGORY_TYPE
AND F.CATEGORY_CD = F_ED.CATEGORY_CD
AND F.CATEGORY_ID = F_ED.CATEGORY_ID
AND F_ED.EFFDT <= SUBSTRING(CONVERT(CHAR, GETDATE(), 121), 1, 10)
)