【问题标题】:SQL - Using a third query to compare results of two previousSQL - 使用第三个查询来比较前两个的结果
【发布时间】:2012-02-17 18:31:57
【问题描述】:

我的数据库中有两个查询从不同的表返回总计,然后我正在运行第三个查询来比较这些总计?

我需要在一个声明中执行此操作,以便我可以在我的 asp.net 站点上发布。这些查询可以合并吗?

以下是三个查询

qry_control_d_total

SELECT 
  tbl_control_d.processed_date, 
  Sum(tbl_control_d.dc_amt) 
AS 
  SumOfdc_amt, 
  tbl_currency.cur_type
FROM 
  tbl_control_d 
INNER JOIN 
  tbl_currency 
ON 
  tbl_control_d.cur_code = tbl_currency.cur_code
GROUP BY 
  tbl_control_d.processed_date, tbl_currency.cur_type
AS 
  qry_control_d_total;

qry_sap_total

SELECT 
   tbl_sap.doc_date, 
Sum
   (tbl_sap.dc_amt) 
AS 
   SumOfdc_amt, 
   tbl_sap.cur_type
FROM 
   tbl_sap
GROUP BY 
   tbl_sap.doc_date, 
   tbl_sap.cur_type
AS 
   qry_sap_total;

最终查询

SELECT 
   qry_control_d_total.processed_date, 
   qry_control_d_total.cur_type, 
   [qry_control_d_total].[sumofdc_amt]-[qry_control_d_total].[sumofdc_amt] 
AS 
   balance, 
   qry_control_d_total.SumOfdc_amt, 
   qry_sap_total.SumOfdc_amt
FROM 
   qry_control_d_total 
INNER JOIN 
   qry_sap_total 
ON 
   (qry_control_d_total.processed_date = qry_sap_total.doc_date) 
AND 
   (qry_control_d_total.cur_type = qry_sap_total.cur_type);

欢迎提出建议


这是我在我的 vb.net 页面中使用的子

sub page_load
    lblyear.text = dateTime.Now.ToString("yyyy")
    Dim objconn as new oledbconnection("provider=Microsoft.jet.oledb.4.0;data source=F:\CCMI\asp\db\control.mdb")
    Dim objcmd As Oledbcommand
    Dim objRdr as OledbDatareader
    Dim strCmd as string
    Dim objDA as oleDbDataAdapter
    if not ispostback then
        '****************
        objcmd = new oledbcommand("SELECT...", objconn)
                objconn.open()
                objRdr = objcmd.executereader()
                dgbal_mc_roi.datasource = objrdr
                dgbal_mc_roi.databind()
                objrdr.close()
                objconn.close()
    end if
end sub

【问题讨论】:

    标签: sql ms-access


    【解决方案1】:

    你快到了,你需要使用你以前的查询作为派生表:

    SELECT 
       qry_control_d_total.processed_date, 
       qry_control_d_total.cur_type, 
       qry_control_d_total.[sumofdc_amt]-qry_control_d_total.[sumofdc_amt] 
    AS 
       balance, 
       qry_control_d_total.SumOfdc_amt, 
       qry_sap_total.SumOfdc_amt
    FROM (  SELECT tbl_control_d.processed_date, Sum(tbl_control_d.dc_amt) AS SumOfdc_amt, tbl_currency.cur_type
            FROM tbl_control_d 
            INNER JOIN tbl_currency 
            ON tbl_control_d.cur_code = tbl_currency.cur_code
            GROUP BY tbl_control_d.processed_date, tbl_currency.cur_type) AS qry_control_d_total 
    INNER JOIN (SELECT tbl_sap.doc_date, Sum(tbl_sap.dc_amt) AS SumOfdc_amt, tbl_sap.cur_type
                FROM tbl_sap
                GROUP BY tbl_sap.doc_date, tbl_sap.cur_type) AS qry_sap_total 
    ON qry_control_d_total.processed_date = qry_sap_total.doc_date
    AND qry_control_d_total.cur_type = qry_sap_total.cur_type
    

    【讨论】:

    • 当我在我的数据库中测试它时这有效,但是当我在我的 .net 站点上尝试时,我得到“qry_control_d_total.processed_date”在选定的数据源上找不到???非常感谢您的帮助,因为这比我得到的要远得多!
    • @Barry - 也许它需要用AS 明确命名派生表,我在我的答案中添加了。无论如何,它可能有很多东西,您需要向我们提供更多信息,您使用的是什么数据库引擎?您如何从您的站点连接到您的数据库?
    • sub page_load lblyear.text = dateTime.Now.ToString("yyyy") Dim objconn as new oledbconnection("provider=Microsoft.jet.oledb.4.0;data source=F:\CCMI\asp \db\control.mdb") Dim objcmd As Oledbcommand Dim objRdr as OledbDatareader Dim strCmd as string Dim objDA as oleDbDataAdapter if not ispostback then '****************** objcmd = new oledbcommand( "SELECT...", objconn) objconn.open() objRdr = objcmd.executereader() dgbal_mc_roi.datasource = objrdr dgbal_mc_roi.databind() objrdr.close() objconn.close() end if end sub
    • @Barry - 所以这是 Access 和基本的,对吧?您是否尝试过我发布的新查询?除此之外,我不知道如何解决此错误。
    • 我已经开始工作了,查询绝对没问题,我的问题是我的数据网格从查询中选择了正确的字段来显示。
    【解决方案2】:

    尝试做一件事

    如果您在存储过程中执行这些查询,

    将第一个查询的结果放入一个临时表中,然后 将第二个表的结果放到另一个临时表中

    为这两个临时表编写一个连接查询!

    【讨论】:

    • Access 中的存储过程以及临时表?
    • 对不起先生,我以为你是在 sql server 中做的。
    猜你喜欢
    • 2022-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多