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 :

Problème deux Qualify en SQL


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Femme Profil pro
    informatique
    Inscrit en
    Mai 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : informatique

    Informations forums :
    Inscription : Mai 2014
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Problème deux Qualify en SQL
    Bonjour,

    J'ai deux champs:

    NoItem et NoIndividu

    Pour l'individu no 1:

    Dans cet exemple, je veux les items 3 et plus c'est-à-dire: 65899788, 87867547, 45464756, 87865323

    NoItem NoIndividu
    55356325 1
    75254676 1
    65899788 1
    87867547 1
    45464756 1
    87865323 1

    En résumé, pour chacun des individus, je veux jamais les 2 premiers items

    Avez-vous un idée de la procédure pour m'aider à m'orienter?

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bonjour,

    quel est votre sgbd ?

  3. #3
    Futur Membre du Club
    Femme Profil pro
    informatique
    Inscrit en
    Mai 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : informatique

    Informations forums :
    Inscription : Mai 2014
    Messages : 8
    Points : 6
    Points
    6
    Par défaut



    terradata et sql

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    utilisez une fonction de fenetrage comme row_number() http://sqlpro.developpez.com/article...-window/#LII-A

  5. #5
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    "les deux premiers"... cela implique une notion d'ordre que vous n'avez pas indiquée !
    D'ailleurs dans votre exemple, si on s'appuie sur l'ordre numérique, les deux premiers sont 45464756 et 55356325.
    Auriez-vous une troisième colonne qui permette de définir l'ordre que vous voulez ?

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 786
    Points
    30 786
    Par défaut
    Tu as la chance de travailler avec Teradata, profite des fonctions de regroupement analytiques et de la clause QUALIFY (spécifique à Teradata)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT	*
    FROM	matable
    QUALIFY	ROW_NUMBER() OVER (ORDER BY macolonnedetri) > 2
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  7. #7
    Futur Membre du Club
    Femme Profil pro
    informatique
    Inscrit en
    Mai 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : informatique

    Informations forums :
    Inscription : Mai 2014
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    J'ai essayé dans le SELECT:

    ROW_NUMBER() OVER (ORDER BY sem,dat,cla,pers,no ASC) AS RANK

    il m'ajoute une colonne rank de 1 à ...

    sauf que j'aimerais que ça recommence à 1 à chaque changement de no?


    Est-ce que ça se fait ?

  8. #8
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Oui, avec la clause de fenêtrage PARTITION BY:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ROW_NUMBER() OVER(PARTITION BY no ORDER BY sem,dat,cla,pers)

  9. #9
    Futur Membre du Club
    Femme Profil pro
    informatique
    Inscrit en
    Mai 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : informatique

    Informations forums :
    Inscription : Mai 2014
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Peut-on mettre de QUALIFY dans une requête WHERE ?

    QUALIFY cpt>6
    QUALIFY Rang>6

    J'aurai vraiment besoin des deux!

  10. #10
    Futur Membre du Club
    Femme Profil pro
    informatique
    Inscrit en
    Mai 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : informatique

    Informations forums :
    Inscription : Mai 2014
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Peut-on mettre de QUALIFY dans une requête WHERE ?

    QUALIFY cpt>6
    QUALIFY Rang>6

    J'aurai vraiment besoin des deux!

  11. #11
    Futur Membre du Club
    Femme Profil pro
    informatique
    Inscrit en
    Mai 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : informatique

    Informations forums :
    Inscription : Mai 2014
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Problème deux Qualify en SQL
    Quelqu'un peut-il m'aider? quand je mets deux Qualify dans le Where, ça me donne un erreur?

    Merci!!!

    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
    17
    18
    19
    20
    21
    22
     
    SELECT EXTRACT (YEAR FROM dat_serv) as annee,
    EXTRACT (MONTH FROM dat_serv) AS mois,
    date,
    no,
    cla,
    disp,
    ROW_NUMBER() OVER(PARTITION BY annee,mois,cla, disp ORDER BY date, no) AS Rang,
    table2.nam,
    COUNT(*) OVER (PARTITION BY cla || disp ||mois )cpt
    FROM table
     
    INNER JOIN table2 ON
    table2.no_indiv=no_indiv
    table2.cod_sta='VIG'
     
    WHERE date BETWEEN '2013-01-01' AND '2013-12-31'
     
    QUALIFY cpt>6
    QUALIFY Rang>6
     
    ORDER BY 3,4

  12. #12
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Citation Envoyé par CatherH Voir le message
    Quelqu'un peut-il m'aider? quand je mets deux Qualify dans le Where, ça me donne un erreur?
    il ne serait pas inutile de poster le message d'erreur dans ce cas.

    Que donne 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
    17
    18
    19
    20
    21
    22
     
    SELECT EXTRACT (YEAR FROM dat_serv) as annee,
    EXTRACT (MONTH FROM dat_serv) AS mois,
    date,
    no,
    cla,
    disp,
    ROW_NUMBER() OVER(PARTITION BY annee,mois,cla, disp ORDER BY date, no) AS Rang,
    table2.nam,
    COUNT(*) OVER (PARTITION BY cla || disp ||mois )cpt
    FROM table
     
    INNER JOIN table2 ON
    table2.no_indiv=no_indiv
    table2.cod_sta='VIG'
     
    WHERE date BETWEEN '2013-01-01' AND '2013-12-31'
     
    QUALIFY cpt>6
    AND Rang>6
     
    ORDER BY 3,4

  13. #13
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 786
    Points
    30 786
    Par défaut
    Il ne peut y avoir qu'une clause QUALIFY comme il ne peut y avoir qu'une clause WHERE ou HAVING... mais rien n'interdit de lier plusieurs conditions
    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
    17
    18
    19
    20
    SELECT  EXTRACT (YEAR FROM tb1.dat_serv)    AS annee
        ,   EXTRACT (MONTH FROM tb1.dat_serv)   AS mois
        ,   tb1.date
        ,   tb1.no
        ,   tb1.cla
        ,   tb1.disp
        ,   ROW_NUMBER() OVER(PARTITION BY annee, mois, tb1.cla, tb1.disp ORDER BY tb1.date, tb1.no)    AS rang
        ,   tb2.nam
        ,   COUNT(*) OVER (PARTITION BY tb1.cla, tb1.disp, mois)    AS cpt
    FROM    table   AS tbl
        INNER JOIN 
            table2  AS tb2
            ON  tb2.no_indiv    = tb1.no_indiv
            AND tb2.cod_sta     = 'VIG'
    WHERE   tb1.date BETWEEN '2013-01-01' AND '2013-12-31'
    QUALIFY rang > 6
        AND cpt > 6
    ORDER BY tb1.date
        ,   tb1.no
    ;
    Pour améliorer la lisibilité de la requête et s'assurer qu'aucune référence à une colonne ou une expression n'est ambigüe, il est conseillé de qualifier les noms de colonne en leur adjoignant l'alias de la table correspondante.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  14. #14
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 761
    Points : 52 544
    Points
    52 544
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par CatherH Voir le message
    Quelqu'un peut-il m'aider? quand je mets deux Qualify dans le Where, ça me donne un erreur?
    QUALIFY étant une clause SQL, comme toute clause SQL (SELECT, FROM, WHERE...) ne peut figurer qu'une seule fois dans votre requête.

    Il suffit donc de combiner vos deux conditions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QUALIFY x = 1 AND y = 33
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. Problème de connexion avec SQL Server sous deux réseaux
    Par Powerdj dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 24/10/2013, 11h10
  2. [SQL Server]Problème avec l'authentification SQL SERVER
    Par tidou dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 20/04/2005, 15h40
  3. Réponses: 4
    Dernier message: 19/04/2004, 13h41
  4. Problème d'installation de sql server 2000
    Par michelci dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 12/12/2003, 08h02
  5. problème de float sur SQL server 2000.
    Par fidji dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 24/07/2003, 14h15

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