Использование 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)
и аналогичные для других дат; Эффект тот же.
Удачи!