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

Langage SQL Discussion :

Deux requêtes en une seule


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    467
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 467
    Par défaut Deux requêtes en une seule
    Bonjour,

    J'ai besoin de réaliser une requête SQL qui me permet récupère 2 indicateurs pour une semaine données.
    En fait, une donnée est basée sur une colonne "SOUMISSION_DATE" et l'autre sur une colonne "MAJ_DATE".

    Pour faire avec 2 requête pas de problème.

    Requête 1 - sur SOUMISSION_DATE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT str_to_date(concat(yearweek(MA_TABLE.SOUMISSION_DATE), ' Sunday'), '%X%V %W') AS SOUMISSION_DATE, count(*) AS 'NOMBRE TICKET'
    FROM MA_TABLE
    	WHERE MA_TABLE.SOUMISSION_DATE > (NOW() - INTERVAL 24 WEEK)
    GROUP BY str_to_date(concat(yearweek(MA_TABLE.SOUMISSION_DATE), ' Sunday'), '%X%V %W')
    ORDER BY str_to_date(concat(yearweek(MA_TABLE.SOUMISSION_DATE), ' Sunday'), '%X%V %W') ASC
    Requête 2 - sur MAJ_DATE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT str_to_date(concat(yearweek(MA_TABLE.MAJ_DATE), ' Sunday'), '%X%V %W') AS MAJ_DATE, count(*) AS 'NOMBRE TICKET'
    FROM MA_TABLE
    	WHERE MA_TABLE.MAJ_DATE > (NOW() - INTERVAL 24 WEEK)
    	AND MA_TABLE.ETAT = 'Ferme'
    GROUP BY str_to_date(concat(yearweek(MA_TABLE.MAJ_DATE), ' Sunday'), '%X%V %W')
    ORDER BY str_to_date(concat(yearweek(MA_TABLE.MAJ_DATE), ' Sunday'), '%X%V %W') ASC

    Pouvez-vous m'aider à faire ces deux requêtes en une seule s'il vous plait?

    Merci pour votre aide,

    Matt

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 475
    Par défaut
    Bonjour,
    Dans la première requête, tu peux ajout un SUM(case when…) pour ne compter que les lignes dont Etat = 'Ferme', et le tour est joué.

    Tatayo.

  3. #3
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    467
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 467
    Par défaut
    Bonjour,

    Merci pour ton aide,

    Par contre, comment puis-je traiter le fait que les balises ORDER et GROUP BY sont réalisées sur des colonnes DATE différentes?

    Matt

  4. #4
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 475
    Par défaut
    Autant pour moi, je n'avais pas vu que les deux requêtes utilisaient des colonnes différentes.
    Suivant le SGBD utilisé, tu peux utiliser 2 CTE et faire une jointure des 2 tables (sur la date ?).
    Ca résout le problème des GROUP BY. Pour ce qui est du tri, là je ne vois pas trop.
    Peux-tu nous monter un exemple et le résultat attendu ?

    Tatayo.

  5. #5
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    467
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 467
    Par défaut
    Bonjour,

    Ma requête pour les tickets ouvert :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT str_to_date(concat(yearweek(MA_TABLE.SOUMISSION_DATE), ' Sunday'), '%X%V %W') AS SOUMISSION_DATE, count(*) AS 'NOMBRE TICKET'
    FROM MA_TABLE
    	WHERE MA_TABLE.SOUMISSION_DATE > (NOW() - INTERVAL 24 WEEK)
    GROUP BY str_to_date(concat(yearweek(MA_TABLE.SOUMISSION_DATE), ' Sunday'), '%X%V %W')
    ORDER BY str_to_date(concat(yearweek(MA_TABLE.SOUMISSION_DATE), ' Sunday'), '%X%V %W') ASC
    Ma requête pour les tickets fermés :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT str_to_date(concat(yearweek(MA_TABLE.MAJ_DATE), ' Sunday'), '%X%V %W') AS MAJ_DATE, count(*) AS 'NOMBRE TICKET'
    FROM MA_TABLE
    	WHERE MA_TABLE.MAJ_DATE > (NOW() - INTERVAL 24 WEEK)
    	AND MA_TABLE.ETAT = 'Ferme'
    GROUP BY str_to_date(concat(yearweek(MA_TABLE.MAJ_DATE), ' Sunday'), '%X%V %W')
    ORDER BY str_to_date(concat(yearweek(MA_TABLE.MAJ_DATE), ' Sunday'), '%X%V %W') ASC

    Résultat des 2 requêtes exécutées séparément :
    Nom : NB_TICKET.png
Affichages : 157
Taille : 25,0 Ko

    Matt

  6. #6
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 475
    Par défaut
    Je vois bien une requête du genre:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    with
    req1 as (// Ici la première requête),
    req2 as (// ici la deuxième requête)
    select coalesce(r1.SOUMISSION_DATE,r2.MAJ_DATE),sum(r1.NOMBRE_TICKET),sum(r2.NOMBRE_TICKET)
    from r1
    full outer join r2 on r1.SOUMISSION_DATE = r2.MAJ_DATE
    group by coalesce(r1.SOUMISSION_DATE,r2.MAJ_DATE)
    order by 1
    Il y a peut-être 2/3 adaptations à faire, je ne maitrise pas encore très bien les CTE. Mais l'idée principale est là.

    Tatayo.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 29/01/2018, 10h12
  2. Réponses: 2
    Dernier message: 24/07/2015, 14h34
  3. Deux requêtes dans une seule requête, est-ce possible ?
    Par Stephane_br dans le forum Développement
    Réponses: 3
    Dernier message: 08/07/2011, 15h35
  4. [MSSQL 2K5] PBM pour mixer deux requêtes en une seule
    Par fredfred dans le forum Langage SQL
    Réponses: 6
    Dernier message: 05/07/2010, 15h12
  5. Deux requêtes en une seule?
    Par pcsystemd dans le forum Requêtes
    Réponses: 5
    Dernier message: 09/07/2009, 16h28

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