在 Visual Studio 3 个查询中使用 CTE
Using a CTE in Visual Studio 3 Queries
我正在尝试从 Visual Studio 的表适配器中创建为 SQL 语句的子查询中获取结果。该项目链接到 oracle 数据库。我最初尝试使用 "with" 子句,它在 Oracle 中运行良好,但不如 Visual Studio 中的 SQL 查询。当我使用 "with" 子句时,错误显示 "unable to parse query"。如果没有 "with" 子句,我的前两个查询(查询 1 和查询 2)可以在 tableadapter 中一起正常工作,但是当我添加主查询时,我收到错误 'SELECT' not recognized。仅供参考:我还尝试使用数据集将连接到但在 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')
在主(外部)查询中找到 FROM 子句:FROM sss, ppp
替换为
FROM ( placeholder_1 ) sss,
( placeholder_2 ) ppp
其中 placeholder_1
应替换为查询 #1 的全文,placeholder_2
应替换为查询 #2 的全文。
您可能需要考虑对外部查询使用 ANSI 标准语法...并且在 GROUP BY 中,如果您按 trunc(sss.startdate)
分组,其他日期也类似,则可以节省时间;效果是一样的
祝你好运!
我正在尝试从 Visual Studio 的表适配器中创建为 SQL 语句的子查询中获取结果。该项目链接到 oracle 数据库。我最初尝试使用 "with" 子句,它在 Oracle 中运行良好,但不如 Visual Studio 中的 SQL 查询。当我使用 "with" 子句时,错误显示 "unable to parse query"。如果没有 "with" 子句,我的前两个查询(查询 1 和查询 2)可以在 tableadapter 中一起正常工作,但是当我添加主查询时,我收到错误 'SELECT' not recognized。仅供参考:我还尝试使用数据集将连接到但在 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')
在主(外部)查询中找到 FROM 子句:FROM sss, ppp
替换为
FROM ( placeholder_1 ) sss,
( placeholder_2 ) ppp
其中 placeholder_1
应替换为查询 #1 的全文,placeholder_2
应替换为查询 #2 的全文。
您可能需要考虑对外部查询使用 ANSI 标准语法...并且在 GROUP BY 中,如果您按 trunc(sss.startdate)
分组,其他日期也类似,则可以节省时间;效果是一样的
祝你好运!