Regrouper 2 lignes dans un même champ de données [SQL] - SQL/NoSQL - Programmation
Marsh Posté le 08-04-2005 à 10:12:11
Bizarre, ton truc
Va falloir deja que ton champ prix, devienne ...un varchar.
Et il va falloir egalement que tu fasses joujou avec un curseur
Après c'est simple, tu selectionnes par intitule, tu concatennes les prix,
et lorsque l'intitule change, tu inscris la nouvelle ligne obtenue.
et on recommence...
Marsh Posté le 08-04-2005 à 10:29:01
Questions :
- As-tu toujours 1 OU 2 lignes de prix par produit, mais jamais plus ?
- As-tu un champ qui permet de différencier ces deux champs ?
- Quel SGBD ?
Marsh Posté le 08-04-2005 à 19:48:47
C'est typiquement le genre de choses à faire dans le code exécutant la requête ... si le nombre de colonnes à produire n'est pas fixe, alors le SGBD ne pourra pas le gérer.
Marsh Posté le 11-04-2005 à 09:52:19
Arjuna a écrit : Questions : |
- Oui toujours 1 ou 2 lignes de prix par produit, jamais plus
- Non je n'ai pas de champ qui permette de différencier ces 2 champs
- SQL Server
Marsh Posté le 11-04-2005 à 10:33:41
Code :
|
Ca devrait marcher.
Mais c'est crade.
Marsh Posté le 11-04-2005 à 10:40:06
Un truc comme ca :
Select Intitule, Prix as PrixA, Prix as PrixB
from TaTable
Where PrixA <> PrixB
group by Intitule
mais c'est pas top et en plus j'ai pas testé ca se trouve ca marchera meme pas (y'a meme de fortes chances pour que ca marche pas )
Marsh Posté le 11-04-2005 à 12:12:56
ToxicAvenger a écrit : mais c'est pas top et en plus j'ai pas testé ca se trouve ca marchera meme pas (y'a meme de fortes chances pour que ca marche pas ) |
marchera pas, faut lier la table deux fois, sinon tu ne récupère pas "prixB". et faut une jointure externe pour que s'il n'y a qu'un seul prix, une ligne soit retournée quand même
Marsh Posté le 11-04-2005 à 17:57:08
En fait la demande de mon chef a changé :
Maintenant le probleme est (presque) le meme à un detail pres :
Code :
|
Ce que je voudrais c'est avoir :
Code :
|
Ca me parait etre plus simple comme ca non ?
Marsh Posté le 11-04-2005 à 20:55:48
select t1.codpro, t1.prix "prix 4", isnull(t2.prix, 0) "prix 12"
from table t2, table t1
where t2.codpro =* t1.corpdo
and t2.type = 12
and t2.prix <> t1.prix
and t1.type = 4
Ceci dit, il faut qu'il y ait au moins un prix 4 pour chaque produit, sinon ça marchera pas (le 12 est facultatif par contre).
Et... Si demain y'a un prix "13" au lieu d'un 12, il ne sera pas affiché. Bref, vérifie bien que c'est ce qu'il veut exactement, et que ça bougera pas, sinon t'as pas d'autre choix que de le faire dans un soft à l'extérieur, ou utilise une fonction qui retourne des lignes sous forme de colonne, mais je ne crois pas que SQL Server en ait...
Marsh Posté le 12-04-2005 à 09:01:59
Arjuna a écrit : select t1.codpro, t1.prix "prix 4", isnull(t2.prix, 0) "prix 12" |
Merci beaucoup !!
Je vais en parler pour savoir s'il est sur que ca bougera pas
Marsh Posté le 12-04-2005 à 18:28:17
Arjuna a écrit : select t1.codpro, t1.prix "prix 4", isnull(t2.prix, 0) "prix 12" |
J'ai fait cette requete ...
mais par contre tous les prix qui sont à "0" n'apparaissent pas dans le resultat
Est-ce que vous auriez des idées ???
Merci
Marsh Posté le 12-04-2005 à 19:22:05
Tu peux donner un jeu de résultat ?
Normalement, ça devrait marcher
Ah, quoique... En effet, si t'as prix1 et prix 2 à la même valeur (0 ou autre), ils ne seront pas retournés !
Attends, je vais tenter de corriger ça
Marsh Posté le 12-04-2005 à 19:24:36
Erf, pendant que mon serveur démarre, je viens de voir en effet un bug
Vire la ligne "and t2.prix <> t1.prix"
Elle ne sert plus à rien maintenant que les prix ont un type, et à priori, c'est de cette contrainte que vient le problème
Marsh Posté le 12-04-2005 à 19:25:47
T'ain, il est long à démarrer C'est bien la peine de foutre 4000 dans un serveur si c'est pour avoir une brouette pareil (bon, ok, il est vieillissant mais bon )
-- Arf, évidement, j'avais pas activé le "quick power on self test" dans le bios... Tester 8 fois de suite la totalité des 2 Go de SDRAM PC133 c'est lent, forcément
Marsh Posté le 12-04-2005 à 19:36:46
Ca semble mieu :
Requêtes :
Code :
|
Résultats :
Code :
|
Seul le produit "DEF" n'est pas retourné, ce qui est logique, car il ne répond pas à la contraire "le type 4 doit forcément être renseigné".
Par contre, CDE est retourné, même en l'absence de type 12, ainsi que ABC et BCD qui ont des prix identiques entre les deux types.
Marsh Posté le 13-04-2005 à 10:06:21
Arjuna a écrit : Ca semble mieu : |
Merci !!
Ca a l'air de fonctionner ... manque plus que la confirmation du chef
Marsh Posté le 07-04-2005 à 17:29:22
Salut,
Je sais pas trop comment expliquer mon probleme mais bon voilà :
J'ai par exemple un résultat comme celui-ci :
Ce que je voudrais c'est avoir :
Est-ce que quelqu'un aurait une idée ... ca me parait pas etre dur mais je trouve pas quand meme et ca m'enerve
Merci par avance de votre aide
Message édité par davyd le 07-04-2005 à 17:31:58