SQL assemblage sur un one-to-many
-
19-09-2019 - |
Question
Ok, voici était ma première question;
Tableau contient un
ID|Name
1 Mary
2 John
Tableau deux contient
ID|Color
1 Red
1 Blue
2 Blue
2 Green
2 Black
Je veux retrouver avec
ID|Name|Red|Blue|Green|Black
1 Mary Y Y
2 John Y Y Y
Il semble que parce qu'il ya 11 valeurs uniques pour sa couleur et 1000 sur 1000 de dossiers dans le tableau qui il n'y a aucun moyen « bon » pour le faire. Ainsi, deux autres questions.
Y at-il un moyen efficace de requête pour obtenir ce résultat? Je peux alors créer un tableau croisé dans ma demande pour obtenir le résultat souhaité.
ID|Name|Color
1 Mary Red
1 Mary Blue
2 John Blue
2 John Green
2 John Black
Si je voulais limiter le nombre d'enregistrements renvoyés comment pourrais-je faire une requête pour faire quelque chose comme ça?
Where ((color='blue') AND (color<>'red' OR color<>'green'))
Donc, en utilisant l'exemple ci-dessus, je puis revenir
ID|Name|Color
1 Mary Blue
2 John Blue
2 John Black
Je me connecte aux tables Visual FoxPro via ADODB utiliser SQL. Merci!
La solution
A partir de votre question avant et interroger une table VFP, vous pouvez obtenir vos résultats par la requête qualifiée VFP suivante ... La complète onglet
select
N.ID,
N.Name,
MAX( IIF( C.Color = "Red", "Y", " " )) Red,
MAX( IIF( C.Color = "Blue", "Y", " " )) Blue,
MAX( IIF( C.Color = "Green", "Y", " " )) Green,
MAX( IIF( C.Color = "Black", "Y", " " )) Black
FROM
C_Names N,
Colors C
WHERE
N.ID = C.ID
GROUP BY
N.ID,
N.Name
Alors, que vous avez d'autres « couleurs », il suffit de copier le MAX (IIF ()) pour cette couleur respective et ont la colonne comme nom de colonne de résultat ... suivre le modèle. Le seul problème est que si vous avez une orthographe différente de sensibles à la casse des couleurs, vous devrez peut-être UPPER (C.Color) = « RED » (ou similaire pour d'autres couleurs)
Autres conseils
Vous cherchez à faire une requête de tableau croisé. Vous pouvez essayer d'utiliser l'assistant de requête de tableau croisé:
http://msdn.microsoft.com/en- nous / bibliothèque / aa979431% 28VS.71% 29.aspx