IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

Portage requete Access vers SQL Server (Iif)...


Sujet :

MS SQL Server

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2005
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Portage requete Access vers SQL Server (Iif)...
    Bonjour,

    Je sollicite votre aide pour le portage d’une requête de ACCESS vers SQL Server. L’objectif de cette requête est de fournir des statiques sur nos réponses à appel d’offre.

    Contexte :
    Je commence par créer une table temporaire à partir de la table contenant toutes les affaires (pour faire un filtre sur les clients, le commercial, …) -> pas de problèmes.

    Puis j’exécute la requête suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    SELECT 
    	mois.nom AS Mois, 
    	Count(AffairesFiltrees.affaire_id) AS Consultations, 
    	Sum(IIf([AffairesFiltrees].[statut]='En attente de décision de répondre',1,0)) AS AttenteRepondre, 
    	Sum(IIf([AffairesFiltrees].[statut]='Déclinée',1,0)) AS Declinees, 
    	Sum(IIf([AffairesFiltrees].[statut]<>'Déclinée',1,0)) AS Reponses, 
    	Sum(IIf([AffairesFiltrees].[statut]='Gagnée',1,0)) AS Affaires_Gagnees, 
    	Sum(IIf([AffairesFiltrees].[statut]='Perdue',1,0)) AS Affaires_Perdues, 
    	Sum(IIf([AffairesFiltrees].[statut]='En attente de décision client',1,0)) AS AttenteClient 
    FROM 
    	AffairesFiltrees RIGHT JOIN mois ON AffairesFiltrees.mois = mois.nom 
    GROUP BY 
    	mois.nom, mois.mois_id 
    ORDER BY 
    	mois.mois_id

    Bien que tordue, cette requête est pratique car elle me permet d’obtenir en une fois les statiques de mes affaires.

    Problème :
    IIf n’existe pas sous SQL Server. Je cherche désespérément une solution mais je ne trouve pas.

    Merci par avance de votre aide.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    L'équivalent de ton IIF est CASE, à chercher dans l'aide SQL SERVER.
    A+
    Soazig

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2005
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Merci pour la piste, mais j'ai déjà regardé du coté du CASE. Cette solution ne me satisfait pas vraiment. Je me dirrige vers une solution avec des sous-requêtes (enfin j'essai...)

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2005
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Finalement je reviens au CASE :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    SELECT 
       mois.nom AS Mois, 
       Count([AQP].[XXXX\ASPNET].AffairesFiltrees.affaire_id) AS Consultations, 
       Count(CASE [AQP].[XXXX\ASPNET].AffairesFiltrees.statut WHEN 'En attente de décision de répondre' THEN 1 END) AS AttenteRepondre,
       Count(CASE [AQP].[XXXX\ASPNET].AffairesFiltrees.statut WHEN 'Déclinée' THEN 1 END) AS Declinees,
       Count(CASE [AQP].[XXXX\ASPNET].AffairesFiltrees.statut WHEN 'Déclinée' THEN 0 ELSE 1 END) AS Reponses,
       Count(CASE [AQP].[XXXX\ASPNET].AffairesFiltrees.statut WHEN 'Gagnée' THEN 1 END) AS Affaires_Gagnees,   
       Count(CASE [AQP].[XXXX\ASPNET].AffairesFiltrees.statut WHEN 'Perdue' THEN 1 END) AS Affaires_Perdues,  
       Count(CASE [AQP].[XXXX\ASPNET].AffairesFiltrees.statut WHEN 'En attente de décision client' THEN 1 END) AS AttenteClient
    FROM 
       [AQP].[XXXX\ASPNET].AffairesFiltrees RIGHT JOIN mois ON [AQP].[XXXX\ASPNET].AffairesFiltrees.mois = mois.nom 
    GROUP BY 
       mois.nom, mois.mois_id 
    ORDER BY 
       mois.mois_id
    Bien que je n'aime pas la forme, j'obtient bien le résultat excompté.
    Cependant je suis obligé de qualifier mes objets : [NomDeMaBase].[Utilisateur].[Table].[Champ].
    Je ne comprends pas pourquoi. La table temporaire est créée par une requête éxecutée par l'utlisateur ASPNET (normal puisque je suis sur un intranet).

    Avez-vous un avis la dessus ?

    Merci,

    Cédric Mousset

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour,
    Pourquoi tu es obligé de préfixé tes tables je ne sais pas, mais tu peux pour te simplifier la vie donner un alias.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    SELECT 
       mois.nom AS Mois, 
       Count(AF.affaire_id) AS Consultations, 
       Count(CASE AF.statut WHEN 'En attente de décision de répondre' THEN 1 END) AS AttenteRepondre, 
       Count(CASE AF.statut WHEN 'Déclinée' THEN 1 END) AS Declinees, 
       Count(CASE AF.statut WHEN 'Déclinée' THEN 0 ELSE 1 END) AS Reponses, 
       Count(CASE AF.statut WHEN 'Gagnée' THEN 1 END) AS Affaires_Gagnees,    
       Count(CASE AF.statut WHEN 'Perdue' THEN 1 END) AS Affaires_Perdues,  
       Count(CASE AF.statut WHEN 'En attente de décision client' THEN 1 END) AS AttenteClient 
    FROM 
       [AQP].[XXXX\ASPNET].AffairesFiltrees as AF RIGHT JOIN mois ON AF.mois = mois.nom 
    GROUP BY 
       mois.nom, mois.mois_id 
    ORDER BY 
       mois.mois_id
    Tu aurais aussi intéret à creer une table Statut
    Code libelle

    Ce serait plus propre.
    A+
    Soazig

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2005
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Merci pour l'idée de l'alias.

    Lorsque je place la requête dans ma page Aspx, je n'ai pas besoin de préfixer mes tables. Cela reste un mystère pour moi... :

    J'ai effectivement une table "Statut" qui contient la liste des statuts permis.
    Cependant je n'assure pas l'intégrité des données dans la base mais dans l'application. Ce choix est certes discutable mais pour obtenir rapidement une application fonctionnelle j'ai sacrifié la robustesse au profit du temps de réalisation...

    Ci-dessous la requête finale (en attendant de trouver mieux) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    SELECT
    	mois.nom AS Mois,
    	Count(AffairesFiltrees.affaire_id) AS Consultations,
    	Count(CASE AffairesFiltrees.statut WHEN 'En attente de décision de répondre' THEN 1 END) AS AttenteRepondre,
    	Count(CASE AffairesFiltrees.statut WHEN 'Déclinée' THEN 1 END) AS Declinees,
    	(Count(AffairesFiltrees.affaire_id) - Count(CASE AffairesFiltrees.statut WHEN 'Déclinée' THEN 1 END) - Count(CASE AffairesFiltrees.statut WHEN 'En attente de décision de répondre' THEN 1 END)) AS Reponses,
    	Count(CASE AffairesFiltrees.statut WHEN 'Gagnée' THEN 1 END) AS Affaires_Gagnees,
    	Count(CASE AffairesFiltrees.statut WHEN 'Perdue' THEN 1 END) AS Affaires_Perdues,
    	Count(CASE AffairesFiltrees.statut WHEN 'En attente de décision client' THEN 1 END) AS AttenteClient
    FROM
    	AffairesFiltrees RIGHT JOIN mois ON AffairesFiltrees.mois = mois.nom
    GROUP BY
    	mois.nom, mois.mois_id
    ORDER BY
    	mois.mois_id
    Merci Soazig pour ton aide.

    Cédric Mousset

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. VB6 : Access vers SQL Server (tables et requetes)
    Par hehehe dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 15/01/2008, 09h21
  2. migrer d'access vers sql server?
    Par poissonsoluble dans le forum Access
    Réponses: 27
    Dernier message: 23/05/2007, 14h29
  3. migration access vers sql-Server
    Par fleuredumonde dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 10/05/2007, 15h16
  4. Réponses: 2
    Dernier message: 28/03/2007, 08h59
  5. [vba] Problème de pass d'access vers sql server
    Par fix105 dans le forum Access
    Réponses: 5
    Dernier message: 22/02/2006, 16h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo