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 :

Regrouper des requetes


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 22
    Par défaut Regrouper des requetes
    Bonjour à tous !

    Sur mon fichier excel, j'ai un tableau qui est construit de cette manière :

    - mois de 1 à 12 pour mes colonnes
    - service de l'entreprise pour mes lignes

    Dans mes cellules, les informations sont importer de SQL SERVER par Microsoft Query.

    Cependant, toute mes requêtes sont identiques à part le mois qui change.

    Voici ma requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select count(*) 
    from nom_de_ma_table
    where year(rqn_decouvertle)=2008 
    and rqn_librerqn1='nom_service' 
    and month(rqn_decouvertle)=1
    Pour éviter de créer la meme requete chaque mois et pour chaque service, Y aurait-il une façon de faire pour regrouper toutes mes requetes en une seule ?


    Merci de votre aide

  2. #2
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    616
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Luxembourg

    Informations forums :
    Inscription : Mars 2007
    Messages : 616
    Par défaut
    Citation Envoyé par samuel539 Voir le message
    Pour éviter de créer la meme requete chaque mois et pour chaque service, Y aurait-il une façon de faire pour regrouper toutes mes requetes en une seule ?


    Merci de votre aide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select year(rqn_decouvertle),  rqn_librerqn1, month(rqn_decouvertle), count(*) 
    from nom_de_ma_table
    group by year(rqn_decouvertle),  rqn_librerqn1, month(rqn_decouvertle)

  3. #3
    Membre expérimenté

    Profil pro
    En reconversion
    Inscrit en
    Novembre 2007
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : En reconversion

    Informations forums :
    Inscription : Novembre 2007
    Messages : 180
    Par défaut
    Bonjour,
    Si vous voulez avoir tous vos mois cote à cote, essayer qq chose comme cela (je n'ai pas pu tester car vous n'avez pas donné les scripts pour les tables et les données)
    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 rqn_librerqn1 ,year(rqn_decouvertle)
    ,COUNT( CASE WHEN month(rqn_decouvertle) = 1 THEN * ELSE NULL END) AS [1]
    ,COUNT( CASE WHEN month(rqn_decouvertle) = 2 THEN * ELSE NULL END) AS [2]
    ,COUNT( CASE WHEN month(rqn_decouvertle) = 3 THEN * ELSE NULL END) AS [3]
    ,COUNT( CASE WHEN month(rqn_decouvertle) = 4 THEN * ELSE NULL END) AS [4]
    ,COUNT( CASE WHEN month(rqn_decouvertle) = 5 THEN * ELSE NULL END) AS [5]
    ,COUNT( CASE WHEN month(rqn_decouvertle) = 6 THEN * ELSE NULL END) AS [6]
    ,COUNT( CASE WHEN month(rqn_decouvertle) = 7 THEN * ELSE NULL END) AS [7]
    ,COUNT( CASE WHEN month(rqn_decouvertle) = 8 THEN * ELSE NULL END) AS [8]
    ,COUNT( CASE WHEN month(rqn_decouvertle) = 9 THEN * ELSE NULL END) AS [9]
    ,COUNT( CASE WHEN month(rqn_decouvertle) = 10 THEN * ELSE NULL END) AS [10]
    ,COUNT( CASE WHEN month(rqn_decouvertle) = 11 THEN * ELSE NULL END) AS [11]
    ,COUNT( CASE WHEN month(rqn_decouvertle) = 12 THEN * ELSE NULL END) AS [12]
    FROM nom_de_ma_table
    GROUP BY rqn_librerqn1 ,year(rqn_decouvertle)
    attention vous ne pourrez pas ajouter une variable dans query avec ce type de requête, il faut donc d'abord créer la vue sur le server (tel que ci dessus) puis quand vous appelez la vue dans query ne pas afficher la colonne avec l'année mais juste l'utiliser comme critère en renvoyant cela a une variable saisie dans une cellule d'excel, ici 2008.
    De même il peut se poser le problème des lignes, donc ici attention soit vous paramétrez la plage de la requête pour ajouter des lignes ci besoin en décalant tout vers le bas (il ne faut surtout rien mettre à droite), soit vous limitez le nombre de ligne dans votre vue sur le serveur (TOP 5, etc)
    Bon courage

  4. #4
    Membre averti
    Inscrit en
    Février 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 22
    Par défaut
    Merci à vous et plus particulièrement à Patic.

    Vous m'avez apporté une grande aide, sa fonctionne nickel. Je signale juste qu'il faut que * soit encadrer par des simples cotes (...THEN '*' ELSE...).

    Par contre, je n'ai pas très bien compris la variable avec query. Par exemple, je déclare ma variable comme ceci : year(rqn_decouvertle)=[annee]. Ma variable annee pointe sur une cellule de ma feuille excel.

    Cependant, il me génère une erreur :

    nom de colonne non valide:'annee'. Impossible de préparer les instructions.

    Auriez-vous une solution ?

    Merci

  5. #5
    Membre averti
    Inscrit en
    Février 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 22
    Par défaut
    Je ne comprends pas un truc : Pourquoi on ne peut pas ajouter une variable dans query avec de type de requête ? Mon second objectif étant de placer l'année en variable comme ça, l'année d'après, j'ai juste à changer la valeur de ma cellule comme ça je n'ai pas besoin de modifier toutes mes requêtes chaque année.

    Il existe un moyen pour faire face à ce problème ?

    Merci de votre aide.

  6. #6
    Membre expérimenté

    Profil pro
    En reconversion
    Inscrit en
    Novembre 2007
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : En reconversion

    Informations forums :
    Inscription : Novembre 2007
    Messages : 180
    Par défaut
    En fait en mettant '*' vous mettez simplement du texte, le * doit être remplacé par une des colonnes de la table (du type clé primaire ou bien une colonne qui ne peut contenir une valeur non nulle, à moins que vous vouliez justement compter les lignes répondant à une colonne en particuliers).
    Personnellement je ne déclare jamais la variable directement dans le script mais via l'interface en affichant les critères, je laisse ainsi query écrire cela comme il le veut (ce n'est pas vraiment du sql).
    A priori query n'accepte les variables que lorsque la requête est réalisée via son interface (QBE), quand vous écrivez vous même le script il va essayer de convertir cela dans son interface et s'il ne peut pas il vous indique que la requête ne peut être afficher, il ne fait alors que renvoyer le résultat. Ici avec les "case" j'ai peur que ça ne fonctionne pas via l'interface.
    Le plus simple si vous n'avez pas la possibilité de créer une vue est d'indiquer l'année directement dans la requête comme ceci :

    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 rqn_librerqn1 
    ,COUNT( CASE WHEN month(rqn_decouvertle) = 1 THEN * ELSE NULL END) AS [1]
    ,COUNT( CASE WHEN month(rqn_decouvertle) = 2 THEN * ELSE NULL END) AS [2]
    ,COUNT( CASE WHEN month(rqn_decouvertle) = 3 THEN * ELSE NULL END) AS [3]
    ,COUNT( CASE WHEN month(rqn_decouvertle) = 4 THEN * ELSE NULL END) AS [4]
    ,COUNT( CASE WHEN month(rqn_decouvertle) = 5 THEN * ELSE NULL END) AS [5]
    ,COUNT( CASE WHEN month(rqn_decouvertle) = 6 THEN * ELSE NULL END) AS [6]
    ,COUNT( CASE WHEN month(rqn_decouvertle) = 7 THEN * ELSE NULL END) AS [7]
    ,COUNT( CASE WHEN month(rqn_decouvertle) = 8 THEN * ELSE NULL END) AS [8]
    ,COUNT( CASE WHEN month(rqn_decouvertle) = 9 THEN * ELSE NULL END) AS [9]
    ,COUNT( CASE WHEN month(rqn_decouvertle) = 10 THEN * ELSE NULL END) AS [10]
    ,COUNT( CASE WHEN month(rqn_decouvertle) = 11 THEN * ELSE NULL END) AS [11]
    ,COUNT( CASE WHEN month(rqn_decouvertle) = 12 THEN * ELSE NULL END) AS [12]
    FROM nom_de_ma_table
    WHERE year(rqn_decouvertle) = 2008
    GROUP BY rqn_librerqn1
    Il vous suffira juste de changer l'année dans le script l'année suivante. Vous pouvez aussi faire en sorte de lui indiquer une année en fonction de la date où vous lancer la requête, par exemple si c'est cette année :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE year(rqn_decouvertle) = YEAR(getdate())

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

Discussions similaires

  1. [AC-2013] Requete regroupant des données selon un intervalle
    Par Gros_poirot dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 17/06/2015, 03h01
  2. regroupe des requetes
    Par popofpopof dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 18/01/2008, 21h17
  3. SQL - Regrouper des enregistrements...
    Par Régent dans le forum Langage SQL
    Réponses: 6
    Dernier message: 06/02/2005, 23h42
  4. Recuperer les erreurs des requetes sql en asp
    Par emile13 dans le forum ASP
    Réponses: 3
    Dernier message: 01/04/2004, 13h49
  5. Optimisation des requetes
    Par bifidus dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 06/10/2003, 11h29

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