Подзапрос SQL Oracle - PullRequest
       11

Подзапрос SQL Oracle

0 голосов
/ 12 октября 2018

У меня проблема с запуском этого подзапроса.Я использую Toad Data Point -Oracle.Я получаю синтаксическую ошибку.Я попробовал несколько разных способов без удачи.Я знаю, чтобы подзапрос

Select *
from FINC.VNDR_ITEM_M as M
where M.ACCT_DOC_NBR = A.ACCT_DOC_NBR
(SELECT A.CLIENT_ID,
       A.SRC_SYS_ID,
       A.CO_CD,
       A.ACCT_NBR,
       A.CLR_DT,
       A.ASGN_NBR,
       A.FISCAL_YR,
       A.ACCT_DOC_NBR,
       A.LINE_ITEM_NBR,
       A.MFR_PART_NBR,
       A.POST_DT,
       A.DRCR_IND, 
       A.DOC_CRNCY_AMT, 
       A.CRNCY_CD, 
       A.BSL_DT        
FROM FINC.VNDR_ITEM_F A
WHERE A.CLR_DT IN (SELECT MAX(B.CLR_DT)
                  FROM FINC.VNDR_ITEM_F AS B
                  where (B.ACCT_DOC_NBR = A.ACCT_DOC_NBR and B.FISCAL_YR=A.FISCAL_YR and B.LINE_ITEM_NBR = A.LINE_ITEM_NBR and B.SRC_SYS_ID =A.SRC_SYS_ID and B.POST_DT=A.POST_DT and B.CO_CD=A.CO_CD) 
                  and (B.CO_CD >='1000' and  B.CO_CD <= '3000'  or B.CO_CD ='7090') and (B.POST_DT Between to_date ('08/01/2018','mm/dd/yyyy')
                                        AND to_date ('08/31/2018', 'mm/dd/yyyy')) and (B.SRC_SYS_ID ='15399') and (B.FISCAL_YR ='2018'))
GROUP BY 
       A.CLIENT_ID,
       A.SRC_SYS_ID,
       A.CO_CD,
       A.ACCT_NBR,
       A.CLR_DT,
       A.ASGN_NBR,
       A.FISCAL_YR,
       A.ACCT_DOC_NBR,
       A.LINE_ITEM_NBR,
       A.MFR_PART_NBR,
       A.POST_DT,
       A.DRCR_IND, 
       A.DOC_CRNCY_AMT, 
       A.CRNCY_CD,
       A.BSL_DT)

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Ваш синтаксис нарушен, вы ставите подзапрос только в конце.Теперь это выглядит так:

select *
from dual as m 
where a.dummy = m.dummy
(select dummy from dual)

Он находится в неверном месте, не присоединен, не псевдоним.Вероятно, вам следует сделать следующее:

select *
from dual m 
join (select dummy from dual) a on a.dummy = m.dummy

У вас также есть несколько лишних скобок, но это незначительный недостаток.Полный код (я не могу проверить его без доступа к данным):

select *
from FINC.VNDR_ITEM_M M
join (SELECT A.CLIENT_ID, A.SRC_SYS_ID, A.CO_CD, A.ACCT_NBR, A.CLR_DT, A.ASGN_NBR,
               A.FISCAL_YR, A.ACCT_DOC_NBR, A.LINE_ITEM_NBR, A.MFR_PART_NBR, A.POST_DT,
               A.DRCR_IND, A.DOC_CRNCY_AMT, A.CRNCY_CD, A.BSL_DT
          FROM FINC.VNDR_ITEM_F A
          WHERE A.CLR_DT IN (SELECT MAX(B.CLR_DT)
                               FROM FINC.VNDR_ITEM_F AS B
                               where B.ACCT_DOC_NBR = A.ACCT_DOC_NBR 
                                 and B.FISCAL_YR=A.FISCAL_YR 
                                 and B.LINE_ITEM_NBR = A.LINE_ITEM_NBR 
                                 and B.SRC_SYS_ID =A.SRC_SYS_ID 
                                 and B.POST_DT=A.POST_DT 
                                 and B.CO_CD=A.CO_CD 
                                 and (('1000'<=B.CO_CD and B.CO_CD<='3000') or B.CO_CD='7090') 
                                 and B.POST_DT Between to_date ('08/01/2018', 'mm/dd/yyyy')
                                                   AND to_date ('08/31/2018', 'mm/dd/yyyy') 
                                 and B.SRC_SYS_ID ='15399' and B.FISCAL_YR ='2018')
          GROUP BY A.CLIENT_ID, A.SRC_SYS_ID, A.CO_CD, A.ACCT_NBR, A.CLR_DT, A.ASGN_NBR, 
                   A.FISCAL_YR, A.ACCT_DOC_NBR, A.LINE_ITEM_NBR, A.MFR_PART_NBR, A.POST_DT, 
                   A.DRCR_IND, A.DOC_CRNCY_AMT, A.CRNCY_CD, A.BSL_DT) A
    on M.ACCT_DOC_NBR = A.ACCT_DOC_NBR and M.CO_CD=A.CO_CD;
0 голосов
/ 12 октября 2018

Вам необходимо добавить псевдоним в SubSelect (или Производная таблица в стандартном SQL):

select *
from
 ( select .......
 ) AS dt
join .... 
...