2012-02-17 1 views
-3

J'ai deux requêtes dans ma base de données qui renvoient des totaux provenant de différentes tables, puis je lance une troisième requête pour comparer ces totaux.SQL - Utilisation d'une troisième requête pour comparer les résultats des deux précédents

Je dois effectuer cela dans une seule déclaration afin que je puisse publier sur mon site asp.net. ces requêtes peuvent-elles être combinées?

Voici les trois querys

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; 

requête finale

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); 

suggestions bienvenues


c'est le sous j'utilise dans mon page 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 

Répondre

0

Vous êtes presque là, vous avez besoin d'utiliser vos querys précédentes sous forme de tableaux dérivés :

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 
+0

cela fonctionne quand je le teste dans ma base de données, mais quand j'essaie sur mon site .net je reçois "qry_control_d_total.processed_date" n'a pas été trouvé sur la source de données sélectionnée ??? J'apprécie vraiment l'aide car c'est beaucoup plus loin que ce que j'ai eu! – Barry

+0

@Barry - Peut-être qu'il fallait nommer explicitement les tables dérivées avec un 'AS', j'ai ajouté sur ma réponse. Quoi qu'il en soit, il peut y avoir beaucoup de choses, vous devez nous donner plus d'informations quel moteur de base de données utilisez-vous?, Comment vous connectez-vous à votre base de données à partir de votre site? – Lamak

+0

sous page_load lblyear.text = dateTime.Now.ToString ("yyyy") Dim obj comme nouveau oledbconnection ("provider = Microsoft.jet.oledb.4.0; source de données = F: \ CCMI \ asp \ db \ control.mdb") Dim objcmd Comme Oledbcommand Dim objRdr comme OledbDatareader Dim strCmd comme une chaîne Dim objDA comme oleDbDataAdapter sinon ispostback alors '**************** objcmd = new oledbcommand ("SELECT ...", objconn) objconn.open() objRdr = objcmd.executereader() dgbal_mc_roi.datasource = objrdr dgbal_mc_roi.databind() objrdr.close() objconn.close() fin si fin sous – Barry

-1

Essayez de faire une chose

Si vous effectuez ces requêtes dans une procédure stockée,

prendre les résultats de la première requête dans une table temporaire et les résultats de la deuxième table dans une autre table temporaire

écrire une requête de jointure pour ces deux tables temporaires!

+0

Procédure stockée dans Access avec des tables temporaires? – JeffO

+0

Je suis tellement désolé monsieur Je pensais que vous le faites dans le serveur SQL. –

Questions connexes