SQL - 使用第三个查询来比较前两个的结果
Posted
技术标签:
【中文标题】SQL - 使用第三个查询来比较前两个的结果【英文标题】:SQL - Using a third query to compare results of two previous 【发布时间】: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
【问题讨论】:
【参考方案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 中做的。以上是关于SQL - 使用第三个查询来比较前两个的结果的主要内容,如果未能解决你的问题,请参考以下文章