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 :

ROLLUP Oui mais :(


Sujet :

MS SQL Server

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2012
    Messages : 7
    Par défaut ROLLUP Oui mais :(
    Bonjour,

    J'ai ce fichier de données

    Voiture 1 Roue 10 euro
    Voiture 1 Moteur 1000 euro
    Voiture 2 Roue 20 euro
    Voiture 2 Moteur 2000 euro.

    Je dois fournir un fichier d'export qui tiens a peu près ce genre de chose.

    Voiture 1 Roue 10 euro
    Voiture 1 Moteur 1000 euro
    Voiture 1 Total 1010 euro
    Voiture 2 Roue 20 euro
    Voiture 2 Moteur 2000 euro.
    Voiture 2 Total 2020 euro

    La base est sous SQL Server

    Par quel(s) mécanisme(s) puis je obtenir les lignes en gras dans le même fichier ?

    Merci pour vos réponses.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 009
    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 009
    Billets dans le blog
    6
    Par défaut
    Un SGBDR ne fait pas de cosmétique... Donc pas de lignes en gras !!!!

    Pour faire ceci, il suffit d'ajouter SUM associé à un GROUP BY CUBE/ROLLUP

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

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2012
    Messages : 7
    Par défaut
    Hello SQLPro,

    Merci pour votre intervention et...

    Bravo pour les lignes en gras ...un peu d'humour ça fait pas de mal.

    Blague à part, cette ligne de total n'existe pas dans les données.

    Je ne connais pas ROLLUP mais effectivement cela semble être la solution.

    Je regarde de ce côté et je reviens pour mettre en résolu.

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 009
    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 009
    Billets dans le blog
    6
    Par défaut
    Si vous n'y arrivez pas, postez la définition de vos tables sous forme DDL et un jeu de requête comme spécifié dans la charte de postage :
    http://www.developpez.net/forums/d96...vement-poster/

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

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2012
    Messages : 7
    Par défaut
    ça devrait être bon, je viens de faire des tests sous MySQL et tout est ok.

    Au pire, ce sera une syntaxe différente sous SQL Server et je serais dessus ce soir.

    Je n'oublie pas de mettre ce post en résolu dès que c'est bon

    Merci
    Merci
    Merci

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2012
    Messages : 7
    Par défaut
    Bonsoir,

    Alors effectivement rollup convient mais je fais face à un nouveau problème.
    Je dois faire un rollup sur une colonne assemblée de plusieurs champs.

    (a + b + c) AS NumeroPiece

    je dois faire mon rollup sur NumeroPiece et je ne trouve pas comment faire puisqu'il me demande un champ réel.

    Je vois bien faire une première requête dans une table temporaire qui contiendrais mes résultats et faire mon rollup dessus mais je m'interroge quant à l'existence d'une autre solution.

    SQL Server 2008

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2012
    Messages : 7
    Par défaut
    Re

    Même en faisant une nouvelle table je me heurte a des problèmes qui sont logiques.
    J'ai quand même l'impression que ce ne doit pas être très compliqué.

    Imaginez la table suivante :

    Article|Prix|ModePaiement

    Chaise|10|CHQ
    Chaise|20|ESP
    Chaise|60|ESP
    Table|100|ESP
    Table|120|CHQ
    Table|200|CHQ

    Je souhaiterais qu'il m'affiche ces données mais en ajoutant une ligne de contrepartie qui ferais le total par TypeArticle (je me fiche du total par ModePaiement)

    Chaise|10|CHQ
    Chaise|20|ESP
    Chaise|60|ESP
    Chaise|90|ALL
    Table|100|ESP
    Table|120|CHQ
    Table|200|CHQ
    Table|420|ALL

    * Le gras est pour mettre en valeur mon propos

    ça sent la requète complexe avec un subselect mais je serais quand même surpris de ne pas pouvoir faire plus simple.

    Merci de vos éclaircissements

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2012
    Messages : 7
    Par défaut
    Que penser d'UNION ?
    Il semble mieux adapté que ROLLUP quand on souhaite grouper sur une seule colonne.

  9. #9
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    UNION ALL fonctionnera oui, mais le ROLLUP fait le travail :
    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
    23
    24
    25
    26
    27
    28
    29
    With MaTable (id, article, prix, modepaiement) as
    (
    select 1, 'Chaise',  10, 'CHQ' union all
    select 2, 'Chaise',  20, 'ESP' union all
    select 3, 'Chaise',  60, 'ESP' union all
    select 4, 'Table_', 100, 'ESP' union all
    select 5, 'Table_', 120, 'CHQ' union all
    select 6, 'Table_', 200, 'CHQ'
    )
      select article
           , sum(prix)                     as prix
           , coalesce(modepaiement, 'ALL') as modepaiement
        from MaTable
    group by article
           , rollup(modepaiement, prix)
      having GROUPING(prix)         = 0
          or GROUPING(modepaiement) = 1
    order by MAX(id) asc;
     
    article prix        modepaiement
    ------- ----------- ------------
    Chaise  10          CHQ
    Chaise  20          ESP
    Chaise  60          ESP
    Chaise  90          ALL
    Table_  100         ESP
    Table_  120         CHQ
    Table_  200         CHQ
    Table_  420         ALL
    J'ai rajouté un _ à table pour éviter la mise en page par le forum, TABLE étant un mot-clef du SQL.

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2012
    Messages : 7
    Par défaut
    Bonjour Waldar,

    UNION a fait le Job.
    Je n'ai pas vu

    HAVING GROUPING(prix) = 0
    OR GROUPING(modepaiement) = 1

    Dans la documentaton SQL Server.

    Si ça marche, c'est juste magique ^^ Je testerais ce soir

    Dans tous les cas, c'est résolu.

    Recevez tous mes remerciements.

  11. #11
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Les fonctions sont bien documentées :
    http://msdn.microsoft.com/en-us/libr...=sql.105).aspx

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

Discussions similaires

  1. Requete imbriquée, oui mais...
    Par zax-tfh dans le forum Requêtes
    Réponses: 6
    Dernier message: 24/03/2005, 02h48
  2. Réponses: 2
    Dernier message: 04/03/2005, 00h23
  3. Création de logiciel, oui, mais quelle base de donnée ?
    Par Acti dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 17/02/2005, 13h41
  4. HomeDB, oui mais comment ?
    Par Gregouz dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 27/10/2004, 16h27
  5. [APPLET-SERVLET] download oui mais upload non ...
    Par meufeu dans le forum Applets
    Réponses: 7
    Dernier message: 09/08/2004, 15h36

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