Использование CTE в запросах Visual Studio 3

Я пытаюсь получить результаты из подзапроса, созданного как оператор SQL в табличном адаптере в Visual Studio. Проект связан с базой данных оракула. Первоначально я пытался использовать предложение "с", которое прекрасно работает в Oracle, но не так сильно, как SQL-запрос в Visual Studio. Когда я использовал предложение "with", в сообщении об ошибке говорилось "невозможно проанализировать запрос". Без предложения "with" я получил первые два запроса (Query 1 и Query 2) для совместной работы в табличном адаптере, но когда я добавляю основной запрос, я получаю ошибку "SELECT", которая не распознается. К вашему сведению: я также пытался использовать хранимую процедуру, к которой будет подключаться набор данных, но не работал бы на стороне Visual Studio, поэтому сейчас я надеюсь выполнить это с помощью оператора SQL, а не хранимой процедуры. Любая помощь приветствуется.

    --- Query 1 ---

 SELECT * from (select
  ss.startdate
 ,ss.enddate
 ,s.segid
 ,s.segno
 ,s.stats
 ,sp.spo
 ,p.pro
FROM
 Spon ss
,Segs s
,pro p
,spo sp
WHERE
 and     ss.segid    =       s.segid
 and     ss.spoid    =       sp.spoid
 and     p.proid    =       sp.proid            
 and     ss.startdate    <=      (par_date1)
 and     ss.enddate      >=      (par_date2)
) sss,

    --- Query 2 ---

 (
SELECT
  p.pickid
  ,p.segid
  ,p.spid
  ,p.pickdate
  ,p.pickqty
FROM      picks p
WHERE
        (P.Pickdate is null or P.Pickdate between  (par_date1) and  ((par_date2))  )
) ppp

    --- Query 3 (MAIN Query - Queries data pulled from Query 1 and Query 2) ---

 SELECT
  sss.shipid
 ,sss.segno
 ,To_Char(sss.StartDate, 'DD-MON-YYYY')  As StartDate
 ,To_Char(sss.EndDate, 'DD-MON-YYYY')  As EndDate
 ,sss.Spo
 ,sss.Pro
 ,To_Char(ppp.PickDate, 'DD-MON-YYYY') As PickDate
 ,To_Char(Max(ppp.PickDate), 'DD-MON-YYYY')   As LastPick
 ,Round(SUM(ppp.PickQty/(Count(distinct sss.spid)) ,2 )  As Avrg
 ,Count(sss.spid)  As TtlPicks
 ,sum(ppp.PickQty) As Ttls
    FROM sss, ppp
   WHERE
        ppp.spid(+)     =       sss.spid
   GROUP BY
 sss.shipid
,sss.segno
,sss.Spo
,sss.Pro
,To_Char(sss.StartDate, 'DD-MON-YYYY')
,To_Char(sss.EndDate, 'DD-MON-YYYY')
,To_Char(ppp.PickDate, 'DD-MON-YYYY')

1 ответ

Решение

Найдите предложение FROM в основном (внешнем) запросе: FROM sss, pppЗамени это

FROM ( placeholder_1 ) sss, 
     ( placeholder_2 ) ppp

где placeholder_1 должен быть заменен полным текстом запроса № 1 и placeholder_2 с полным текстом запроса № 2.

Вы можете рассмотреть возможность использования стандартного синтаксиса ANSI для внешнего запроса... и в GROUP BY вы сэкономите время, если сгруппируете по trunc(sss.startdate) и аналогичные для других дат; Эффект тот же.

Удачи!

Другие вопросы по тегам