Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1940 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL]Regrouper 2 lignes dans un même champ de données

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SQL]Regrouper 2 lignes dans un même champ de données

n°1039172
davyd
alea jacta est ...
Posté le 07-04-2005 à 17:29:22  profilanswer
 

Salut,
 
Je sais pas trop comment expliquer mon probleme mais bon voilà :
J'ai par exemple un résultat comme celui-ci :
 

Code :
  1. Intitule |  Prix
  2. -------------------
  3. AA           18
  4. AA           25
  5. BCF           1
  6. BCF          40


 
 
Ce que je voudrais c'est avoir :
 

Code :
  1. Intitule |  Prix
  2. -------------------
  3. AA          18  25
  4. BCF         1   40


 
 
 
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  :fou:  
 
Merci par avance de votre aide  :hello:  
 
 [:alex_]


Message édité par davyd le 07-04-2005 à 17:31:58
mood
Publicité
Posté le 07-04-2005 à 17:29:22  profilanswer
 

n°1039746
ipahc
TNZ pue du bec
Posté le 08-04-2005 à 10:12:11  profilanswer
 

Bizarre, ton truc :D
 
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...  
 
 

n°1039764
Arjuna
Aircraft Ident.: F-MBSD
Posté le 08-04-2005 à 10:29:01  profilanswer
 

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 ?

n°1040724
Beegee
Posté le 08-04-2005 à 19:48:47  profilanswer
 

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.

n°1042626
davyd
alea jacta est ...
Posté le 11-04-2005 à 09:52:19  profilanswer
 

Arjuna a écrit :

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 ?


 
 
- 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

n°1042657
Arjuna
Aircraft Ident.: F-MBSD
Posté le 11-04-2005 à 10:33:41  profilanswer
 

Code :
  1. select t1.codpro, t1.prix, isnull(t2.prix, 0) prix2
  2. from table t2, table t1
  3. where t2.codpro =* t1.corpdo
  4. and t2.prix <> t1.prix


 
Ca devrait marcher.
Mais c'est crade.


Message édité par Arjuna le 11-04-2005 à 10:34:02
n°1042665
ToxicAveng​er
Posté le 11-04-2005 à 10:40:06  profilanswer
 

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 :D )

n°1042677
davyd
alea jacta est ...
Posté le 11-04-2005 à 10:55:33  profilanswer
 

Je vais tester tout ca !!
Merci de vos réponses  :jap:

n°1042772
Arjuna
Aircraft Ident.: F-MBSD
Posté le 11-04-2005 à 12:12:56  profilanswer
 

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 :D )


 
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 ;)

n°1042810
ToxicAveng​er
Posté le 11-04-2005 à 12:34:19  profilanswer
 

ah oui, un left outer join alors :o

mood
Publicité
Posté le 11-04-2005 à 12:34:19  profilanswer
 

n°1043039
Arjuna
Aircraft Ident.: F-MBSD
Posté le 11-04-2005 à 15:08:21  profilanswer
 

d'où mon =* :p ;)

n°1043288
davyd
alea jacta est ...
Posté le 11-04-2005 à 17:57:08  profilanswer
 

En fait la demande de mon chef a changé :  
 
Maintenant le probleme est (presque) le meme à un detail pres :  
 

Code :
  1. Intitule |  Prix  | Style
  2. ------------------------------
  3. AA           18          4
  4. AA           25          12
  5. BCF           1          4
  6. BCF          40          12


 
 
Ce que je voudrais c'est avoir :
 

Code :
  1. Intitule |  Prix 4  | Prix 12
  2. ------------------------------
  3. AA          18           25
  4. BCF         1            40


 
 
Ca me parait etre plus simple comme ca non ?


Message édité par davyd le 11-04-2005 à 17:57:29
n°1043415
Arjuna
Aircraft Ident.: F-MBSD
Posté le 11-04-2005 à 20:55:48  profilanswer
 

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...

n°1043690
davyd
alea jacta est ...
Posté le 12-04-2005 à 09:01:59  profilanswer
 

Arjuna a écrit :

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...


 
 
Merci beaucoup !!
Je vais en parler pour savoir s'il est sur que ca bougera pas  :jap:

n°1044650
davyd
alea jacta est ...
Posté le 12-04-2005 à 18:28:17  profilanswer
 

Arjuna a écrit :

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...


 
J'ai fait cette requete ...
mais par contre tous les prix qui sont à "0" n'apparaissent pas dans le resultat  :pt1cable:  
 
Est-ce que vous auriez des idées ???
 
Merci  :jap:  

n°1044688
Arjuna
Aircraft Ident.: F-MBSD
Posté le 12-04-2005 à 19:22:05  profilanswer
 

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 :D

n°1044689
Arjuna
Aircraft Ident.: F-MBSD
Posté le 12-04-2005 à 19:24:36  profilanswer
 

Erf, pendant que mon serveur démarre, je viens de voir en effet un bug :D
 
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 :)

n°1044691
Arjuna
Aircraft Ident.: F-MBSD
Posté le 12-04-2005 à 19:25:47  profilanswer
 

T'ain, il est long à démarrer :o C'est bien la peine de foutre 4000 € dans un serveur si c'est pour avoir une brouette pareil :o (bon, ok, il est vieillissant mais bon :D)
 
-- 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 :sleep:


Message édité par Arjuna le 12-04-2005 à 19:29:09
n°1044706
Arjuna
Aircraft Ident.: F-MBSD
Posté le 12-04-2005 à 19:36:46  profilanswer
 

Ca semble mieu :
 
Requêtes :

Code :
  1. select *
  2. from prix
  3. select t1.codpro, t1.prix "prix 4", isnull(t2.prix, 0) "prix 12"
  4. from prix t2, prix t1
  5. where t2.codpro =* t1.codpro
  6. and t2.typeprx = 12
  7. and t1.typeprx = 4


 
Résultats :

Code :
  1. codpro     typeprx prix                                                 
  2. ---------- ------- -----------------------------------------------------
  3. ABC        4       0.0
  4. ABC        12      0.0
  5. BCD        4       10.0
  6. BCD        12      10.0
  7. CDE        4       12.0
  8. DEF        12      20.0
  9. EFG        4       8.0
  10. EFG        12      12.0
  11. FGH        4       25.0
  12. FGH        12      10.0
  13. (10 row(s) affected)
  14. codpro     prix 4                                                prix 12                                             
  15. ---------- ----------------------------------------------------- -----------------------------------------------------
  16. ABC        0.0                                                   0.0
  17. BCD        10.0                                                  10.0
  18. CDE        12.0                                                  0.0
  19. EFG        8.0                                                   12.0
  20. FGH        25.0                                                  10.0
  21. (5 row(s) affected)


 
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.

n°1045403
davyd
alea jacta est ...
Posté le 13-04-2005 à 10:06:21  profilanswer
 

Arjuna a écrit :

Ca semble mieu :
 
...
 
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.


 
Merci !!
Ca a l'air de fonctionner ... manque plus que la confirmation du chef  :D  


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL]Regrouper 2 lignes dans un même champ de données

 

Sujets relatifs
[PHP] problème pour echanger des donnees avec un serveur SOAPrecuperer un champ d'input disabled
SQL | Requete de débutant, mais je bug !!!Macro excel VBA complexe sur Filtre auto + récupération des données...
[SQL server] Faire un max sur une unionRequêtes SQL sur une base de données ACCESS en réseau ?
[J2ME] Besoin d'explication sur les données persistentesExportation automatique d'une base de données Mysql
Contrôle/fonctions Windows utilisant la base de données TZ 
Plus de sujets relatifs à : [SQL]Regrouper 2 lignes dans un même champ de données


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR