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

Bases de données Delphi Discussion :

Trier une table avec valeur de differentes unités


Sujet :

Bases de données Delphi

  1. #1
    Membre du Club
    Inscrit en
    Mars 2003
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 106
    Points : 59
    Points
    59
    Par défaut Trier une table avec valeur de differentes unités
    Bonjour,
    Voici mon prebleme: j'ai une table qui se compose comme suit ( exemple):
    CODE / UNITE / VALEUR
    ------------------------------------------------
    01 / Kg / 10
    02 / Kg / 15
    03 / QL / 1
    04 / QL / 0.05

    Il faudrai que je puisse trier les enregistrements dans un dataset en fonction du champ VALEUR, le probleme c'est que les unités ne sont pas les meme (1 QL = 100 Kg), y'a t'il une possibilité de faire ca? peut etre en pouvant agir sur le dataset obtenu (rajouter un champ avec toutes les valuer converties en Kg et trier)

  2. #2
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    avec une requete union si tu n'as que 2 types d'unité :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Select Code,Unite,Valeur as PoidKg from ta_table
    Where Unite = 'Kg'
    union
    Select Code,Unite,(Valeur * 100) as PoidKg from ta_table
    Where Unite = 'QL'
    Order by PoidKg
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  3. #3
    Membre du Club
    Inscrit en
    Mars 2003
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 106
    Points : 59
    Points
    59
    Par défaut
    ok, merci beaucoup! et si j'ai un type d'unité en plus il faut rajouter une clause UNION?

  4. #4
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par Sydaze
    ok, merci beaucoup! et si j'ai un type d'unité en plus il faut rajouter une clause UNION?
    Oui, mais plus tu vas rajouter d'union plus ca risque d'être lent
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  5. #5
    Membre du Club
    Inscrit en
    Mars 2003
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 106
    Points : 59
    Points
    59
    Par défaut
    Ok, c'est vrai que j'ai remarqué que beaucoup de clauses telles que Group By, distinct, join ext... ralentissent ennormement l'execution des requettes.

  6. #6
    Membre du Club
    Inscrit en
    Mars 2003
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 106
    Points : 59
    Points
    59
    Par défaut
    Cla reaquete fonctionne mis a part quand je rajoute la clause ORDER BY a la fin, j'obtient un message d'erreur: Can only use column number in order by clause with UNION.
    c'est surement du a la base de données que j'utilise (informix)

  7. #7
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Met le order by entre le premier where et le union
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  8. #8
    Membre du Club
    Inscrit en
    Mars 2003
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 106
    Points : 59
    Points
    59
    Par défaut
    non sa place etait bonne cependant avec UNION informix veux qu'on fasse reference à la colonne par numero dans ORDER BY, dans le cas de l'exemple il faut metre ORDER BY 3 et non ORDER BY PoidKg.
    Cette SGBD va me rendre fou.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 63
    Points : 54
    Points
    54
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Select
      Code,
      Unite,
      Valeur,
      decode (Unite, 'QL', Valeur*100, Valeur) as ValReelle
    From ta_Table
    Order by ValReelle
    Par contre je ne sais pas si "decode" est valable pour ton SGBD
    Tu peux multiplier les unités ainsi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    decode (Unite, 'QL', Valeur*100, decode (Unite, 'Autre', Valeur*10, decode (Unite, 'Milli', Valeur/1000, Valeur)))
    Mais ce n'est pas très "propre" si tu as bcp d'Unités. L'idéal étant d'avoir une table de correspondance [Unité;Coefficient] qui contiendrait pour ton exemple :
    'QL'; 100
    'Kg'; 1

    Et ensuite tu fais une jointure entre des 2 tables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Select Code, Unite,  Valeur, Valeur*Coefficient as ValReelle
    From ta_Table, tableCoef
    Where
    ta_Table.Unite = tableCoef.unite
    Order By ValReelle

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

Discussions similaires

  1. [WD18] Remplir combo dans une table avec valeurs différentes
    Par turkijudo dans le forum WinDev
    Réponses: 1
    Dernier message: 03/11/2014, 10h27
  2. [ZF 1.11] Validateur comparaison input d'une table avec valeur d'une autre table
    Par yoann92 dans le forum Zend_Form
    Réponses: 17
    Dernier message: 03/09/2012, 13h35
  3. Réponses: 3
    Dernier message: 18/02/2009, 18h00
  4. Update d une table avec plusieurs valeurs
    Par Nadaa dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 17/05/2006, 08h58
  5. Trier une colonne avec des valeurs numériques ou textes
    Par jfc dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 07/02/2006, 11h15

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