[RESOLU] Retourner une table?

Petit nouveau ! | 4 Messages

07 sept. 2012, 05:22

Salut tout le monde,

J'explique mon problème: un document (Id) contient trois champs (Champ) et deux utilisateurs remplissent tous les deux ce document (Data_1 et Data_2 pour le contenu des champs). J'aimerai faire une requête où je récupère Data_1 et Data_2 et Data_ref, qui est une valeur de référence. Ca sera plus clair avec des tableaux:
J'ai deux tables:

- la table saisie:
Id Champ Data_1 Data_2
id1 f1 x x
id1 f2 x x
id1 f2 x x
id2 f1 x x
id2 f2 x x
id2 f3 x x
id3 f1 x x
id3 f2 x x
id3 f3 x x

- la table ref:
Id f1 f2 f3
id1 y y y
id2 y y y
id3 y y y

Et j'aimerai obtenir ça:
Id Champ Data_1 Data_2 Data_ref
id1 f1 x x y
id1 f2 x x y
id1 f2 x x y
id2 f1 x x y
id2 f2 x x y
id2 f3 x x y
id3 f1 x x y
id3 f2 x x y
id3 f3 x x y

En gros le problème est "juste"de réussir à sélectionner une colonne variable dont le nom est contenu dans une ligne. J'ai trouvé des solutions pour SQL Server 2000 mais j'utilise HeidiSQL et ça ne marche pas (je suis vraiment débutant donc dites moi si je dis des choses aberrantes :D )

ViPHP
ViPHP | 2577 Messages

07 sept. 2012, 08:53

Peut être:
select sasie.*, CASE champ WHEN 'f1' THEN t1.f1 WHEN 'f2' THEN t2.f2 else t3.f3  end 
from saisie, ref as t1, ref as t2 ref as t3 
where saisie.id = t1.id and t1.champs = 'f1'
and saisie.id = t2.id and t2.champs = 'f2'
and saisie.id = t3.id and t3.champs = 'f3'

Petit nouveau ! | 4 Messages

10 sept. 2012, 06:08

J'ai tenté et ça plante. Je pense avoir trouver quelque chose qui marche en enlevant quelques conditions ce qui donne:
SELECT saisie.*, CASE champ WHEN 'f1' THEN ref.f1 WHEN 'f2' THEN ref.f2 else ref.f3  end 
FROM saisie, ref
WHERE saisie.id = ref.id 
Merci beaucoup, je ne connaissais pas la fonction CASE!