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

Développement SQL Server Discussion :

Order by dans une vue


Sujet :

Développement SQL Server

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2017
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2017
    Messages : 176
    Par défaut Order by dans une vue
    Bonjour,

    Je voudrais pouvoir concaténer les résultats de 3 requêtes dans l'ordre qui suit.

    Je voudrais que le résultat de la 1ère requête soit en tête de liste, suivie de la 2ème requête et enfin le résultat de la 3ème requête ordonnée dans l'ordre croissant en fonction de la colonne 2.

    J'ai essayé d'écrire la requête en utilisant la clause with et d'utiliser au niveau du select la fonction ROW_NUMBER() over( order by ... ASC) ... mais ça n'a pas fonctionné.

    Je voudrais un truc 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
    select '' as col1, count(*)
    from table1
    union all
    select col1, count(*)
    from table1
    where col3 = 'B'
    group by col1
    union all
    (select col1, count(*)
    from table1
    where col3 <> 'A'
    group by col1
    order by col2)

  2. #2
    Invité
    Invité(e)
    Par défaut
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    with SR AS ( 
    	select 1 as RowOrder, '' as col1, count(*) AS Card from table1
    	UNION ALL select 2 as RowOrder, col1, count(*) AS Card from table1 where col3 = 'B' group by col1
    	UNION ALL select 3 as RowOrder, col1, count(*) AS Card from table1 where col3 <> 'A' group by col1  
    )
    select col1, Card
    from SR
    order by RowOrder

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2017
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2017
    Messages : 176
    Par défaut
    Merci pour votre proposition.

    Je voudrais faire un order by sur la 3ème requête comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select col1, count(*)
    from table1
    where col3 <> 'A'
    group by col1
    order by col2 asc

  4. #4
    Invité
    Invité(e)
    Par défaut
    Désolé, j'avais zappé ce point.
    Il faut dire que ta demande est pas mal floue et ne respect pas vraiment les normes (DDL des tables, données de test pour les tables et résultat attendu...)
    Essaie ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    with SR AS ( 
    	select 1 as RowOrder, '' as col1, count(*) AS Card from table1
    	UNION ALL select 2 as RowOrder, col1, count(*) AS Card from table1 where col3 = 'B' group by col1
    	UNION ALL select 3 + ROW_NUMBER() OVER( ORDER BY col2) as RowOrder, col1, count(*) AS Card from table1 where col3 <> 'A' group by col1  
    )
    select col1, Card
    from SR
    order by RowOrder

  5. #5
    Invité
    Invité(e)
    Par défaut
    Oublie ça !
    Ta requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select col1, count(*)
    from table1
    where col3 <> 'A'
    group by col1
    order by col2
    n'a aucune sens, tu n'as pas de col2 dans ton select !

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    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 : 22 002
    Billets dans le blog
    6
    Par défaut
    Une vue ne dois JAMAIS avoir d'ORDER BY FINAL. En effet, le tri n'est JAMAIS garantit dans une vue, car une vue c'est une table et sur une table on fait une requête et cette requête peut avoir un ORDER BY différent !
    La clause ORDER BY est donc ignorée à l'exécution de la vue....

    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/ * * * * *

  7. #7
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2017
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2017
    Messages : 176
    Par défaut
    Je sais bien mais je me demandais s'il y avait un moyen de contourner ça.

    J'ai fait ceci (à optimiser) et ça fonctionne comme je le souhaite.

    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
    with SR as (
    select '' as col1, col2, count(*) as 'col3'
    from table1
    group by ...
    union all
    select '' as col1, col2, count(*) as 'col3'
    from table1
    where col3 = 'A'
    group by ...
    union all
    select ROW_NUMBER() over( order by ... ASC), col2, count(*) as 'col3'
    from table1
    where col3 <> 'A'
    group by ...)
    select col2, col3
    from SR
    order by col1 asc

  8. #8
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    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 : 22 002
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par Jinkas99 Voir le message
    Je sais bien mais je me demandais s'il y avait un moyen de contourner ça.
    Tout ceci est d'une haute stupidité…. Qu'este ce que vous ne comprenez pas dans la phrase :

    le tri n'est JAMAIS garantit dans une vue

    Ce qui vous semble marcher aujourd'hui ne marchera plus demain, sans vous prévenir !

    Donc, soit vous êtes stupide et continuez à faire de genre de stupidité, soit vous êtes intelligent, et vous devez changer votre fusil d'épaule !

    Voici un extrait de l'aide en ligne de Microsoft SQL Server :
    https://docs.microsoft.com/fr-fr/sql...l-server-ver15
    Nom : Order-by-create_view.jpg
Affichages : 607
Taille : 30,7 Ko


    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/ * * * * *

  9. #9
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2017
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2017
    Messages : 176
    Par défaut
    Je pense que vous avez mal compris mon intention.

    En tout cas vous êtes quelqu'un d'irrespectueux et méchant mais je vous remercie tout de même pour le temps que vous avez pris pour m'écrire.

    Pour info garantit ne prend pas de t dans "le tri n'est JAMAIS garantit dans une vue".

    :-)

    A +

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

Discussions similaires

  1. SQL 2005 Clause ORDER BY dans une vue
    Par Philippe Robert dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 02/10/2011, 18h18
  2. Réponses: 16
    Dernier message: 17/06/2005, 15h44
  3. Paramètres possibles dans une vue ms sql server
    Par lutin2003 dans le forum MS SQL Server
    Réponses: 14
    Dernier message: 30/03/2005, 19h03
  4. Insérer dans une Vue ordonnée
    Par biroule dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 27/09/2004, 15h27
  5. Problème de Order by dans une requête
    Par showa dans le forum Requêtes
    Réponses: 3
    Dernier message: 03/08/2004, 15h40

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