0

我試圖從在Visual Studio中的tableadapter中作爲SQL語句創建的子查詢中獲取結果。該項目鏈接到一個oracle數據庫。我最初嘗試使用「with」子句,該子句在Oracle中正常工作,但不如Visual Studio中的SQL查詢。當我使用「with」子句時,錯誤表示「無法解析查詢」。沒有「with」子句,我得到了前兩個查詢(查詢1和查詢2)在tableadapter中一起正常工作,但是當我添加主查詢時,出現錯誤「SELECT」無法識別。僅供參考:我也嘗試使用數據集將連接到的存儲過程,但無法在Visual Studio一側工作,所以現在我希望用SQL語句而不是存儲過程完成此操作。任何幫助表示讚賞。在Visual Studio 3中使用CTE查詢

--- 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') 

回答

0

找到FROM子句中的主(外)查詢:FROM sss, ppp

FROM (placeholder_1) sss, 
    (placeholder_2) ppp 

其中placeholder_1應的查詢#1和placeholder_2與全文全文被替換替換它查詢#2。

您可能需要考慮對外部查詢使用ANSI標準語法......並且在GROUP BY中,如果按照trunc(sss.startdate)進行分組,則可以節省時間;對於其他日期,效果是一樣的。

祝你好運!

+0

謝謝mathguy,但我認爲那就是我已經擁有的。 – Raspberry

+0

@覆盆子 - 我不確定你的意思。你已經有三個不同的查詢。我所展示的是一個單一的查詢。我建議的是:以查詢語句3.查找它的'FROM'子句,它表示'FROM sss,ppp'。現在複製查詢1的全文,將其粘貼在'FROM'和'sss'之間,並放在括號內。這樣它就變成了子查詢或「內聯視圖」而不是CTE(在「WITH」子句中)。對查詢2的全文做同樣的事情:複製它,將其粘貼在'sss,'和'ppp'之間,並將它括在括號中。 – mathguy

+0

哦,我明白了!對不起@mathguy的誤解。感謝您的輸入!我會試一試。 :-)。 – Raspberry