CONVERSION IIF ACCESS VERS FONCTION SQL [Résolu]

SebOfBorg 94 Messages postés dimanche 29 septembre 2002Date d'inscription 26 août 2009 Dernière intervention - 5 nov. 2004 à 11:13 - Dernière réponse : SebOfBorg 94 Messages postés dimanche 29 septembre 2002Date d'inscription 26 août 2009 Dernière intervention
- 5 nov. 2004 à 11:54
Bonjour,

J'ai besoin de voteraide sur une conversion de requete entre Access et SQL.

L'idée est de faire une table acec des Chiffres d'affaires (Mois, Mois Annee-1, Exercice, Ex N-1, Glissant, Glissant -1) ventilée par
Représentant
Voici l'existant Access :

SELECT "0675" & [EFA_ST_REPRE ] AS ID,
"2004" AS AN, "09" AS MOIS,
Sum(IIf(DFA_PERIODE )=[MoisN],[DFA_MONT_LIGN],0)) AS CA_MOIS,
Sum(IIf(DFA_PERIODE )=[MoisN_1],[DFA_MONT_LIGN],0)) AS CA_MOIS_1,
Sum(IIf(DFA_PERIODE ) Between "200401" And [MoisN],[DFA_MONT_LIGN],0)) AS CA_EXERCICE,
Sum(IIf(DFA_PERIODE ) Between "200301" And [MoisN_1],[DFA_MONT_LIGN],0)) AS CA_EXERCICE_1,
Sum(IIf(DFA_PERIODE Between [TOURNANT_N_1] And [MoisN],[DFA_MONT_LIGN],0)) AS CA_TOURNANT,
Sum(IIf(DFA_PERIODE ) Between [TOURNANT_N_2] And [MoisN_1],[DFA_MONT_LIGN],0)) AS CA_TOURNANT_1,

FROM dbo_t_ent_fact LEFT JOIN dbo_t_det_fact ON dbo_t_ent_fact.EFA_FAC_ID = dbo_t_det_fact.DFA_FAC_ID
WHERE (((dbo_t_ent_fact.EFA_ID_TY_BON)<>"80" And (dbo_t_ent_fact.EFA_ID_TY_BON)<>"85" And (dbo_t_ent_fact.EFA_ID_TY_BON)<>"95"))
GROUP BY "0675" & [EFA_ST_REPRE ]
ORDER BY "0675" & [EFA_ST_REPRE ];

Voici ce que j'essai :

SELECT
'2015' as Region,
D_FAC_CLI.DFA_ID_SOC_REXEL AS ENSEIGNE,
E_FAC_CLI.EFA_ST_AGEN_REXEL AS AGENCE,
E_FAC_CLI.EFA_ST_REPRE AS TCI,
/*==================================*/
CA_MOIS= (
Select
CAST(SUM(D_FAC_CLI.DFA_MONT_LIGN) AS MONEY)
FROM D_FAC_CLI
Where (D_FAC_CLI.DFA_PERIODE = '200410')
),
/*==================================*/
CA_MOIS_1= (
Select
CAST(SUM(D_FAC_CLI.DFA_MONT_LIGN) AS MONEY)
FROM D_FAC_CLI
Where (D_FAC_CLI.DFA_PERIODE = '200310')
),
/*==================================*/
CA_EXERCICE= (
Select
CAST(SUM(D_FAC_CLI.DFA_MONT_LIGN) AS MONEY)
FROM D_FAC_CLI
Where (D_FAC_CLI.DFA_PERIODE between '200401' and '200410')
),
/*==================================*/
CA_EXERCICE_1= (
Select
CAST(SUM(D_FAC_CLI.DFA_MONT_LIGN) AS MONEY)
FROM D_FAC_CLI
Where (D_FAC_CLI.DFA_PERIODE between '200301' and '200310')
)
/*==================================*/
FROM D_FAC_CLI INNER JOIN
E_FAC_CLI ON D_FAC_CLI.DFA_FAC_ID = E_FAC_CLI.EFA_FAC_ID
GROUP BY D_FAC_CLI.DFA_ID_SOC_REXEL, E_FAC_CLI.EFA_ST_AGEN_REXEL, E_FAC_CLI.EFA_ST_REPRE, D_FAC_CLI.DFA_PERIODE

Mais j'ai juste la somme totale de la table et pas le detail par EFA_ST_REPRE

Merci
Afficher la suite 

2 réponses

Meilleure réponse
SebOfBorg 94 Messages postés dimanche 29 septembre 2002Date d'inscription 26 août 2009 Dernière intervention - 5 nov. 2004 à 11:54
3
Merci
SELECT
E_FAC_CLI.EFA_ID_AGEN_FAC_REXEL AS AGENCE,
E_FAC_CLI.EFA_ST_REPRE AS TCI,

CA_MOIS =
CAST(Sum(CASE
WHEN DFA_PERIODE = '200410' THEN D_FAC_CLI.DFA_MONT_LIGN
ELSE 0
END
) AS MONEY),
CA_MOIS_1 =
CAST(Sum(CASE
WHEN DFA_PERIODE = '200310' THEN D_FAC_CLI.DFA_MONT_LIGN
ELSE 0
END
) as MONEY),
CA_EXERCICE =
CAST(Sum(CASE
WHEN DFA_PERIODE BETWEEN '200401' and '200410' THEN D_FAC_CLI.DFA_MONT_LIGN
ELSE 0
END
) as MONEY),
CA_EXERCICE_1 =
CAST(Sum(CASE
WHEN DFA_PERIODE BETWEEN '200301' and '200310' THEN D_FAC_CLI.DFA_MONT_LIGN
ELSE 0
END
) as MONEY),
CA_GLISSANT =
CAST(Sum(CASE
WHEN DFA_PERIODE BETWEEN '200311' and '200410' THEN D_FAC_CLI.DFA_MONT_LIGN
ELSE 0
END
) as MONEY),
CA_GLISSANT_1 =
CAST(Sum(CASE
WHEN DFA_PERIODE BETWEEN '200211' and '200310' THEN D_FAC_CLI.DFA_MONT_LIGN
ELSE 0
END
) as MONEY)
FROM D_FAC_CLI INNER JOIN
E_FAC_CLI ON D_FAC_CLI.DFA_FAC_ID = E_FAC_CLI.EFA_FAC_ID
GROUP BY EFA_ID_AGEN_FAC_REXEL,EFA_ST_REPRE
ORDER BY EFA_ID_AGEN_FAC_REXEL,EFA_ST_REPRE

Bon Courage
A plus
SebOfBorg

Merci SebOfBorg 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

SebOfBorg 94 Messages postés dimanche 29 septembre 2002Date d'inscription 26 août 2009 Dernière intervention - 5 nov. 2004 à 11:24
0
Merci
Bonjour,

J'ai aussi essayé le SELECT CASE mais cela me renvoi un maximum de ligne et pas une seule comme la fonction IIF de Access

SELECT
E_FAC_CLI.EFA_ID_AGEN_FAC_REXEL AS AGENCE,
E_FAC_CLI.EFA_ST_REPRE AS TCI,
DFA_PERIODE,
CA_MOIS =
CASE
WHEN DFA_PERIODE = '200410' THEN CAST(SUM(D_FAC_CLI.DFA_MONT_LIGN) AS MONEY)
ELSE 0
END

FROM D_FAC_CLI INNER JOIN
E_FAC_CLI ON D_FAC_CLI.DFA_FAC_ID = E_FAC_CLI.EFA_FAC_ID
GROUP BY EFA_ID_AGEN_FAC_REXEL,EFA_ST_REPRE, DFA_PERIODE
ORDER BY EFA_ID_AGEN_FAC_REXEL,EFA_ST_REPRE, DFA_PERIODE

Bon Courage
A plus
SebOfBorg

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.