0

我正在尝试从在 Visual Studio 的 tableadapter 中创建为 SQL 语句的子查询中获取结果。该项目链接到一个 oracle 数据库。我最初尝试使用“with”子句,它在 Oracle 中运行良好,但不如 Visual Studio 中的 SQL 查询。当我使用“with”子句时,错误说“无法解析查询”。如果没有“with”子句,前两个查询(查询 1 和查询 2)可以在 tableadapter 中正常工作,但是当我添加主查询时,我得到一个错误“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')
4

1 回答 1

0

在主(外部)查询中找到 FROM 子句:FROM sss, ppp 将其替换为

FROM ( placeholder_1 ) sss, 
     ( placeholder_2 ) ppp

whereplaceholder_1应替换为 Query #1placeholder_2的全文和 Query #2 的全文。

您可能需要考虑对外部查询使用 ANSI 标准语法......并且在 GROUP BY 中,如果您trunc(sss.startdate)对其他日期进行分组和类似,您将节省时间;效果是一样的。

祝你好运!

于 2016-09-29T20:34:33.680 回答