将两个查询连接到一个查询或进行子查询

时间:2010-04-26 15:43:46

标签: sql

我在最初为某些Access表单执行的以下查询时遇到了一些问题:

SELECT qry1.TCKYEAR AS Yr, COUNT(qry1.SID) AS STUDID, qry1.SID AS MID, table_tckt.tckt_tick_no 
FROM table_tckt INNER JOIN qry1 ON table_tckt.tckt_SID = qry1.SID
GROUP BY qry1.TCKYEAR, qry1.SID, table_tckt.tckt_tick_no 
HAVING (((table_tckt.tick_no)=[forms]![frmNAME]![cboNAME]));

SELECT table_tckt.sid, FORMAT([tckt_iss_date], 'yyyy') AS TCKYEAR, table_tckt.tckt_tick_no, table_tckt.licstate
FROM table_tckt
WHERE (((table_tckt.licstate)<>"NA"));

我不再使用Access,而是使用表单的JSP。我需要以某种方式将这两个查询组合成一个查询,或者找到另一种方法让查询“查询”另一个查询。

1 个答案:

答案 0 :(得分:1)

以下是在SQL Server中执行此操作的最快方法。我不知道你使用什么作为后端,但也许它会指出你正确的方向。

它基本上使用with {}中的语句来创建一个可以查询的名为sql1的内存表。

with 
 {
 SELECT table_tckt.sid, 
    FORMAT([tckt_iss_date], 'yyyy') AS TCKYEAR,
    table_tckt.tckt_tick_no, 
    table_tckt.licstate
FROM table_tckt
WHERE (((table_tckt.licstate)<>"NA"));
  } as sql1
 SELECT qry1.TCKYEAR AS Yr, 
    COUNT(qry1.SID) AS STUDID, 
    qry1.SID AS MID, 
    table_tckt.tckt_tick_no 
 FROM table_tckt 
INNER JOIN qry1 ON table_tckt.tckt_SID = qry1.SID
GROUP BY qry1.TCKYEAR, qry1.SID, table_tckt.tckt_tick_no 
HAVING (((table_tckt.tick_no)=@YourVariable));