CONVERSION IIF ACCESS VERS FONCTION SQL

Résolu
SebOfBorg Messages postés 94 Date d'inscription dimanche 29 septembre 2002 Statut Membre Dernière intervention 26 août 2009 - 5 nov. 2004 à 11:13
SebOfBorg Messages postés 94 Date d'inscription dimanche 29 septembre 2002 Statut Membre Dernière intervention 26 août 2009 - 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

2 réponses

SebOfBorg Messages postés 94 Date d'inscription dimanche 29 septembre 2002 Statut Membre Dernière intervention 26 août 2009
5 nov. 2004 à 11:54
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
3
SebOfBorg Messages postés 94 Date d'inscription dimanche 29 septembre 2002 Statut Membre Dernière intervention 26 août 2009
5 nov. 2004 à 11:24
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
0
Rejoignez-nous