2010-07-01 2 views
0

Si j'ai trois requêtes et que les lignes des requêtes ne sont pas toutes identiques. Comment puis-je écrire une instruction SQL qui va combiner les trois requêtes et toutes leurs lignes de données en une seule requête?Requêtes dans MS Access 2003, aide sur l'utilisation d'un SELECT NESTED

La requête que j'utilise actuellement laisse certaines lignes à l'écart, je suppose que les lignes ne sont pas toutes égales et, à ce que je sache, Access ne prend pas en charge les jointures externes complètes. Voici la requête que je suis actuellement en utilisant:

SELECT 
    ZBASED.ACCT_UNIT, 
    CCtable.CenterName, 
    ZBASED.ACCOUNT, 
    ZBASED.ACCOUNT_DESC, 
    qryBUD11.Bud11, 
    qryBUD10.Bud10, 
    qryACTvPROJ.ActvProj10 
FROM 
    CCtable, 
    (
     (ZBASED INNER JOIN qryACTvPROJ ON ZBASED.ACCOUNT=qryACTvPROJ.ACCOUNT) 
     INNER JOIN qryBUD11 ON ZBASED.ACCOUNT=qryBUD11.ACCOUNT 
    ) 
INNER JOIN qryBUD10 ON 
    ZBASED.ACCOUNT=qryBUD10.ACCOUNT 
WHERE 
    ZBASED.ACCT_UNIT = [Cost Center] AND 
    CCtable.CenterNo = [Cost Center] 
ORDER BY ZBASED.ACCOUNT; 

qryACTvPROJ

SELECT BUDGET.FISCAL_YEAR, BUDGET.BUDGET_NBR, BUDGET.ACCT_UNIT, BUDGET.ACCOUNT, ZBASED.ACCOUNT_DESC, BUDGET.DB_AMOUNT_01+BUDGET.DB_AMOUNT_02+BUDGET.DB_AMOUNT_03+BUDGET.DB_AMOUNT_04+BUDGET.DB_ AMOUNT_05+BUDGET.DB_AMOUNT_06+BUDGET.DB_AMOUNT_07+BUDGET.DB_AMOUNT_08+BUDGET.DB_AMOUNT_09+BUDGET.DB_AMOUNT_10+BUDGET.DB_AMOUNT_11+BUDGET.DB_AMOUNT_12+BUDGET.CR_AMOUNT_01+BUDGET.CR_AMOUNT_02+BUDGET.CR_AMOUNT_03+BUDGET.CR_AMOUNT_04+BUDGET.CR_AMOUNT_05+BUDGET.CR_AMOUNT_06+BUDGET.CR_AMOUNT_07+BUDGET.CR_AMOUNT_08+BUDGET.CR_AMOUNT_09+BUDGET.CR_AMOUNT_10+BUDGET.CR_AMOUNT_11+BUDGET.CR_AMOUNT_12 AS ActvProj10 
FROM BUDGET INNER JOIN ZBASED ON BUDGET.ACCOUNT=ZBASED.ACCOUNT 
WHERE (((BUDGET.FISCAL_YEAR)=2010) And ((BUDGET.BUDGET_NBR)=6) And ((ZBASED.ACCT_UNIT)=BUDGET.ACCT_UNIT And (ZBASED.ACCT_UNIT)=[Cost Center])) 
ORDER BY ZBASED.ACCOUNT; 

qryBUD11

SELECT BUDGET.FISCAL_YEAR, BUDGET.BUDGET_NBR, BUDGET.ACCT_UNIT, BUDGET.ACCOUNT, ZBASED.ACCOUNT_DESC, BUDGET.DB_AMOUNT_01+BUDGET.DB_AMOUNT_02+BUDGET.DB_AMOUNT_03+BUDGET.DB_AMOUNT_04+BUDGET.DB_AMOUNT_05+BUDGET.DB_AMOUNT_06+BUDGET.DB_AMOUNT_07+BUDGET.DB_AMOUNT_08+BUDGET.DB_AMOUNT_09+BUDGET.DB_AMOUNT_10+BUDGET.DB_AMOUNT_11+BUDGET.DB_AMOUNT_12+BUDGET.CR_AMOUNT_01+BUDGET.CR_AMOUNT_02+BUDGET.CR_AMOUNT_03+BUDGET.CR_AMOUNT_04+BUDGET.CR_AMOUNT_05+BUDGET.CR_AMOUNT_06+BUDGET.CR_AMOUNT_07+BUDGET.CR_AMOUNT_08+BUDGET.CR_AMOUNT_09+BUDGET.CR_AMOUNT_10+BUDGET.CR_AMOUNT_11+BUDGET.CR_AMOUNT_12 AS Bud11 
FROM BUDGET INNER JOIN ZBASED ON BUDGET.ACCOUNT = ZBASED.ACCOUNT 
WHERE (((BUDGET.FISCAL_YEAR)=2011) AND ((BUDGET.BUDGET_NBR)=2) AND ((ZBASED.ACCT_UNIT)=[BUDGET].[ACCT_UNIT] And (ZBASED.ACCT_UNIT)=[Cost Center])) 
ORDER BY ZBASED.ACCOUNT; 

qryBUD10

SELECT BUDGET.FISCAL_YEAR, BUDGET.BUDGET_NBR, BUDGET.ACCT_UNIT, BUDGET.ACCOUNT, ZBASED.ACCOUNT_DESC, BUDGET.DB_AMOUNT_01+BUDGET.DB_AMOUNT_02+BUDGET.DB_AMOUNT_03+BUDGET.DB_AMOUNT_04+BUDGET.DB_AMOUNT_05+BUDGET.DB_AMOUNT_06+BUDGET.DB_AMOUNT_07+BUDGET.DB_AMOUNT_08+BUDGET.DB_AMOUNT_09+BUDGET.DB_AMOUNT_10+BUDGET.DB_AMOUNT_11+BUDGET.DB_AMOUNT_12+BUDGET.CR_AMOUNT_01+BUDGET.CR_AMOUNT_02+BUDGET.CR_AMOUNT_03+BUDGET.CR_AMOUNT_04+BUDGET.CR_AMOUNT_05+BUDGET.CR_AMOUNT_06+BUDGET.CR_AMOUNT_07+BUDGET.CR_AMOUNT_08+BUDGET.CR_AMOUNT_09+BUDGET.CR_AMOUNT_10+BUDGET.CR_AMOUNT_11+BUDGET.CR_AMOUNT_12 AS Bud10 
FROM BUDGET INNER JOIN ZBASED ON BUDGET.ACCOUNT=ZBASED.ACCOUNT 
WHERE (((BUDGET.FISCAL_YEAR)=2010) AND ((BUDGET.BUDGET_NBR)=1) AND ((ZBASED.ACCT_UNIT)=BUDGET.ACCT_UNIT) And ((ZBASED.ACCT_UNIT)=[Cost Center])) 
ORDER BY ZBASED.ACCOUNT; 

Apparemment, je dois trouver une instruction SELECT imbriquée (SELECT dans SELECT). Est-ce que quelqu'un peut m'aider avec ça?

+0

Pourriez-vous nous donner plus d'informations sur les requêtes que vous essayez de combiner? –

+0

Voici les 3 requêtes. Désolé, je ne sais pas comment modifier. – Edmond

Répondre

0

Il semble que les colonnes sélectionnées, la jointure et l'ordre sont identiques dans les trois requêtes. La seule chose qui change est la clause WHERE. Alors peut-être vous avez juste besoin OU trois clauses ensemble ...

SELECT ...list of columns... 
    FROM BUDGET INNER JOIN ZBASED ON BUDGET.ACCOUNT=ZBASED.ACCOUNT 
WHERE (((BUDGET.FISCAL_YEAR)=2010) And ((BUDGET.BUDGET_NBR)=6) And ((ZBASED.ACCT_UNIT)=BUDGET.ACCT_UNIT And (ZBASED.ACCT_UNIT)=[Cost Center])) 
OR (((BUDGET.FISCAL_YEAR)=2011) AND ((BUDGET.BUDGET_NBR)=2) AND ((ZBASED.ACCT_UNIT)=[BUDGET].[ACCT_UNIT] And (ZBASED.ACCT_UNIT)=[Cost Center])) 
OR (((BUDGET.FISCAL_YEAR)=2010) AND ((BUDGET.BUDGET_NBR)=1) AND ((ZBASED.ACCT_UNIT)=BUDGET.ACCT_UNIT) And ((ZBASED.ACCT_UNIT)=[Cost Center])) 
ORDER BY ZBASED.ACCOUNT 

(donner ou prendre() ou deux).

+0

@ Brian. Cela a fonctionné pour rassembler tous les comptes dans mon CCquery, mais il a omis certaines des autres informations dont j'avais besoin dans la requête. J'ai une question pour vous, pouvez-vous convertir la requête à un select imbriqué ou sélectionner dans un select? Si oui, comment l'écririez-vous? – Edmond

+0

Je ne suis pas sûr qu'un select imbriqué soit la solution à votre problème; quelles informations sont manquantes dans la requête? Quand nous aurons réglé ce que l'on veut, nous pourrons nous inquiéter des moyens de l'obtenir. –

+0

J'ai 16 lignes dans qrybud11, 15 lignes dans qrybud10 et 16 lignes dans qryactvproj. Lorsque j'utilise CCquery pour combiner toutes les requêtes séparées, je n'ai que 13 lignes de données, car si les requêtes n'ont pas les mêmes informations de ligne, la ligne entière est omise. J'en ai besoin pour importer toutes les lignes de toutes les requêtes et juste ajouter un 0 si une requête n'a pas les mêmes informations. – Edmond