Je ne sais pas si cela est possible avec une requête SQL, mais je vais essayer.Plusieurs résultats pour un champ dans une requête SQL jointe
Je suis en train de développer un composant Web SharePoint en C# qui se connecte à une base de données SQL et exécute une requête, puis des liens de données dont le résultat est défini sur une grille. Ça fonctionne bien, mais j'ai un petit problème. Pour l'essentiel, ma requête retournera exactement un résultat pour chaque champ. J'affiche l'information verticalement, donc il ressemble à peu près à ceci:
Customer Name Mr. Customer
Customer Address 980 Whatever St.
Customer City Tallahassee
Tout s'affiche très bien. Cependant, l'une des tables de la base de données renvoie à peu près toujours plusieurs résultats. Il répertorie différents types de matériaux utilisés pour différents produits, de sorte que le schéma est différent parce que chaque client aura évidemment un nom, une adresse, une ville, etc., ils auront tous au moins un produit, et ce produit aura à au moins un matériau. Si je devais afficher ces informations sur lui-même, il ressemblerait à quelque chose comme ceci:
Product Steel Type Wood Type Paper Type
-----------------------------------------------------------------------------
Widget Thick Oak Bond
Whatsit Thin Birch
Thingamabob Oak Cardstock
Idéalement, je suppose que le résultat final serait quelque chose comme:
Customer Name Mr. Customer
Customer Address 980 Whatever St.
Customer City Tallahassee
Widget Steel Thick
Widget Wood Oak
Widget Paper Bond
Whatsit Steel Thin
Whatsit Wood Birch
Thingamabob Wood Oak
Thingamabob Paper Cardstock
Un autre résultat acceptable pourrait être quelque chose comme ce qui suit, en ajoutant quelques colonnes, mais seulement de retourner des résultats pour ces champs:
Customer Name Mr. Customer
Customer Address 980 Whatever St.
Customer City Tallahassee
Product Steel Type Wood Type Paper Type
Widget Thick Oak Bond
Whatsit Thin Birch
Thingamabob Oak
Je suis ouvert à toute suggestion. Je voudrais inclure ceci dans le jeu de résultats sans une requête séparée, si c'est possible. Voici le code que j'utilise pour extraire les données:
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
DataSet ds = new DataSet();
da.Fill(ds, "Specs");
DataSet flipped_ds = FlipDataSet(ds);
DataView dv = flipped_ds.Tables[0].DefaultView;
GridView outputGrid = new GridView();
outputGrid.ShowHeader = false;
outputGrid.DataSource = dv;
outputGrid.DataBind();
Controls.Add(outputGrid);
Je listerais ma requête SQL, mais c'est énorme. J'utilise actuellement plus d'une centaine de champs, avec beaucoup de formatage et de concaténation de SUBSTRING, donc ce serait un gaspillage d'espace, mais c'est vraiment une requête assez simple où je sélectionne des champs avec l'instruction AS pour obtenir le noms que je veux, et en utilisant quelques JOINs LEFT pour tirer dans les données dont j'ai besoin sans plusieurs requêtes. Le schéma du produit/la table des matières est quelque chose comme ceci:
fldMachineID
fldProductType
fldSteel
fldWood
fldPaper
Alors évidemment, chaque client a un certain nombre d'entrées, une pour chaque valeur différente de fldProductType. Si je laisse quelque chose, je peux l'ajouter. Merci pour le temps et l'aide de tout le monde!
Quelle base de données utilisez-vous et comment attendez-vous que ces valeurs soient renvoyées? –
Je ne suis pas sûr de comprendre. En l'état, il me semble que tout ce que vous avez à faire est d'ajouter un LEFT JOIN. Mais d'après votre question, il est évident que vous connaissez LEFT JOINS, donc cela ne peut pas être aussi simple. Cela me ramène à 'je ne suis pas sûr de comprendre'. Peut-être que l'ajout de la production attendue éclaircirait les choses. –
J'utilise SQL Server 2005. J'ai modifié la question initiale pour mieux refléter mes résultats souhaités. Maintenant que je l'ai fait, je suis sûr que vous pouvez voir que l'ajout d'un autre LEFT JOIN va maintenant me donner plusieurs ensembles de résultats (un pour chaque résultat dans fldProductType) mais dans le contexte de la grille de données, j'ai vraiment besoin d'une seule colonne des noms de types de données et une deuxième colonne de résultats. –