Il me semble que tu attends beaucoup de SQL... La requête d'Amel me semble une 
bonne voie; maintenant, ce n'est plus qu'une question de présentation.

Je ne suis pas expert SQL, mais je sais que transformer des lignes en colonnes 
(les noms des commerces en l'occurrence) n'est pas une mince affaire.

Si le nombre de commerces est connu et pas trop grand, j'opterais pour une 
solution très peu propre (mais à partir du moment où tu veux faire de la 
présentation avec SQL...) : une table temporaire avec pour chaque colonne le 
nom du commerce, ainsi que l'id de l'article. D'une manière ou l'autre, tu dois 
pouvoir la générer à partir d'un SELECT sur la table des commerces.

Ca te donnerait une table du genre
commerce_temp
  marchandise_id int not null
  coop money null,
  migros money null, ...

Que tu remplirais avec tous les articles avec quelque chose du genre
INSERT INTO commerce_temp
(marchandise_id)
SELECT marchandise_id
FROM marchandise;

A ce stade, il peut valoir la peine d'ajouter un index sur le marchandise_id 
(ou la créer en tant que clé primaire).

Ensuite de quoi tu mettrais les prix à jour pour chaque commerce :
UPDATE commerce_temp
SET coop = (SELECT S.Prix
 FROM   Sondage S,
 WHERE  S.Date IN (
         SELECT MAX(T.Date)
         FROM   Sondage T
         WHERE  S.Marchandise_id = T.Marchandise_id
           AND  S.commerce_id = <coop_id>
       )

Tu devrais pouvoir générer cette requête pour les <coop_id> et <migros_id> de 
la même manière que tu auras pu générer la table temporaire.

Pour l'affichage :
  SELECT * FROM commerce_temp;
avec une jointure sur les articles pour choper le nom.

Maintenant, si tu as 2'000 commerces, tu risques de toucher des limites telles 
que le nombre de champs dans une table.

Bonne chance...

Blaise


----- Message d'origine -----
De: Félix Hauri <[EMAIL PROTECTED]>
Date: Mon, 14 May 2007 13:25:08 +0200
Sujet: Re: [gull] Question SQL: créer des comparatif
À: "Groupe romand des Utilisateurs de Linux et Logiciels Libres (Liste  
technique)" <[email protected]>

>On Sun, May 13, 2007 at 01:40:42PM +0200, Amel Kapetanovic wrote:
>> Salut,
>> 
>> Je m'y prendrais du genre (non testé, SQL2) :
>> 
>> SELECT S.Commerce, S.Prix
>> FROM   Sondage S
>> WHERE  S.Marchandise = Id_choisi AND
>>       S.Date IN (
>>         SELECT MAX(T.Date)
>>         FROM   Sondage T
>>         WHERE  S.Commerce    = T.Commerce AND
>>                S.Marchandise = T.Marchandise
>>       )
>> ;
>Hmm. oui, jusque là, j'étais arrivé;-)
>(ou par une table temporaire comme proposé par Martial)
>
>> 
>> Remarquons qu'on est ennuyé si il y a >1 date max par (Commerce, 
>> Marchandise) dans Sondage
>Cela ne risque pas: on ne va pas sonder deux fois le même magasin
>dans la même journée...
>
>(au pire en ajoutant ``ORDER BY Id DESC LIMIT 1'' avant
> la fermeture de parenthèse, voire en se basant sur Id qui
> est nécessairement unique et tant que ORDER by Id ne
> peut pas contredire ORDER by date... ;)
>
>En fait, j'aimerais arriver à préparer un truc du style:
>
>SELECT Marchandise.descr, Prix(Commerce_1,MAX(Date)),
>    Prix(Commerce_...,MAX(Date)), Prix(Commerce_n,MAX(Date))
>  FROM My database...
>  ... ORDER BY Marchandise.descr
>
>Pour obtenir qqch comme:
>``Comparaison en date du: $date
>  Marchandise       | Coop    | Migros  | Denner   | ...
>  ------------------+---------+---------+----------+--
>  Chocolat au lait  |    12.- |    12.- |     12.- |...
>  Mouton Rotschild  |   120.- |   120.- |    120.- |...
>  ...                                                     ''
>
>> Félix Hauri a écrit :
>> > ...
>> >J'aimerais réaliser une table temporaire, présentant de la sorte:
>> >
>> >- Comparaison:
>> >Marchandise Id(Marchandise)
>> >Commerce_1   Prix (Marchandise, Commerce_1, selon dernier sondage)
>> >Commerce_... Prix (Marchandise, Commerce_..., selon dernier sondage)
>> >Commerce_n   Prix (Marchandise, Commerce_n, selon dernier sondage)
>
>-- 
> Félix Hauri  -  <[EMAIL PROTECTED]>  -  http://www.f-hauri.ch
>_______________________________________________
>gull mailing list
>[email protected]
>http://lists.alphanet.ch/mailman/listinfo/gull
>


--
B. Carrupt

_______________________________________________
gull mailing list
[email protected]
http://lists.alphanet.ch/mailman/listinfo/gull

Répondre à