|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : janvier 2011 Messages : 6 ![]() |
Bonjour,
J'ai la table suivante : ID_DECLARATION|ID_MOTIF|NB_JR 101 |20 |2 101 |21 |1 101 |22 |0 101 |23 |0 101 |24 |0 102 |20 |3 etc... J'aimerai obtenir l'affichage suivant : ID_DECLARATION|MOTIF_20|NB_JR_20|MOTIF_21|NB_JR_21 etc... J'ai vu que l'on pouvait utiliser le PIVOT, ou un CASE mais je ne m'en sors pas, si quelqu'un pouvait m'aider ^^ Je travaille sous SQL SERVER 2005 Merci d'avance pour votre aide |
|
|
00
|
|
|
#2 |
![]() ![]() |
Ce que tu cherches à faire est de la cosmétique et n'est pas le boulot du SGBD mais celui du logiciel qui présente les données à l'utilisateur.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
|
|
#3 | |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Citation:
Si un nouvel ID_MOTIF vient s'ajouter plus tard, il ne sera pas pris en compte, ou alors tu devra modifier ta requete, qui du coup renverra deux colonnes de plus, et donc certainement modifier le programme qui la traite, etc La seule solution serait de générer dynamiquement ta requete avant de l'exécuter, ce qui est loin d'être propre ! Donc la question est : pourquoi veux tu faire ca ? |
|
|
|
00
|
|
|
#4 |
|
Invité de passage
![]() Inscription : janvier 2011 Messages : 6 ![]() |
Le but de ceci est de de créer une vue générale reprenant toutes les informations de toutes mes tables.
C'est cette vue que j'interroge dans mon application cela simplifie et allège toutes les requêtes que je fais dans mon application. |
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Inscription : janvier 2011 Messages : 6 ![]() |
Il n'y a que 5 motifs possibles et je ne fais aucun calculs c'est juste de l'affichage.
Un utilisateur déclare une déclaration avec le nombre de jours pour chaque motif (si un motif ne possède pas de jours je met 0 ce qui induit qu'une déclaration aura toujours 5 et seulement 5 motifs). Mon application interroge un arbre qui regroupe toutes les informations le problème est la redondance à savoir plusieurs ligne sql pour la même déclaration. A terme la base de donnée possèdera beaucoup de déclarations et je ne peux me permettre de surcharger ma vue en ayant plusieurs lignes par déclaration. Le but est donc de parvenir à une seule ligne par déclaration. Au sujet de la mise à jour du nombre de jours par motifs, ma fonction ne passe pas par la vue, elle réécrit directement dans les tables qu'interroge ma vue ainsi les modifications apparaissent bien lorsqu'elles ont lieu. |
|
|
00
|
|
|
#6 | |||||
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Je crois que vous faites fausse route...
Citation:
de plus, ceci Citation:
Citation:
Surtout que si vous utilisez des requete de type Pivot, vous ne pourrez pas indexer ces vues ! Citation:
EDIT : Suppression de paragraphe... j'ai mélangé deux discussions... Créer une vue pour "regrouper toutes les informations de la base de donnée" est une démarche absurde, contre performante, et vous vous rendrez vite compte que le problème de pivot que vous avez là va se reproduire à chaque nouvelle information à ajouter à la vue. Citation:
Un conseil donc, abandonnez cette idée de "vue magique" qui regroupe toutes les informations, vous foncez droit dans le mur. Le peu d'informations que vous nous avez fournies sur votre base me fait penser qu'elle n'est pas mal modélisée, mais je pense que l'utilisation que vous voulez en faire vous compliquera au final plus la tache qu'autre chose ! |
|||||
|
|
00
|
|
|
#7 |
|
Invité de passage
![]() Inscription : janvier 2011 Messages : 6 ![]() |
Pour le principe de faire une vue qui regroupe toutes les informations je suis stagiaire et c'est la manière de faire de l'entreprise dans laquelle je travaille.
Petite précision je ne fais aucun calcul dans mes requêtes, les chiffres ne sont pas des sommes, ils sont ce que l'utilisateur saisit. Voici une partie de mon MCD : T_DECLARATION (idDeclaration, dateDebut, dateFin) T_MOTIF (idMotif, libelleMotif, nbJrMotif) T_DECLARATION_MOTIF (#idDeclaration, #idMotif) |
|
|
00
|
|
|
#8 | ||
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Citation:
Mais je vous l'accorde, c'est parfois plus facile a écrire qu'a faire ![]() Citation:
Dans mon post précédent également d'ailleurs |
||
|
|
10
|
|
|
#9 |
|
Invité de passage
![]() Inscription : janvier 2011 Messages : 6 ![]() |
Oui c'est sur pour ce qui est de faire changer les habitudes
De toute façon pour le moment j'ai fait autrement, mais je ne sais pas s'ils vont accepter ma solution. Pour ce qui est de votre confusion, ce n'est pas grave, j'en avais simplement déduit que c'était moi qui avait mal expliqué les choses. |
|
|
00
|
|
|
#10 | ||
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Pour répondre donc a votre question initiale sur la requete pivot, voici le code pour votre cas :
Code sql :
même si comme l'a dit Cinephil, cela ne devrait pas être le travail d'un SGBDR, enfin, il est parfois plus facile de refaire une requete que le monde |
||
|
|
00
|
|
|
#11 |
|
Invité de passage
![]() Inscription : janvier 2011 Messages : 6 ![]() |
Houra !!!! Merci milles fois aieeeuuuuu
Tu m'enlèves vraiment une grosse épine du pied Merci à toutes les personnes ayant participer à cette conversation pour leur aide. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com