2010-06-29 4 views
2

D'accord, ma description est un peu longue mais porte sur moi.Quelle est la meilleure façon d'ajouter une colonne à un ensemble de données existant?

J'ai deux requêtes extrêmement longues que je cours sur plusieurs tables, en utilisant un INNER JOIN. La seule différence entre ces deux requêtes est qu'elles prennent différentes valeurs d'entrée pour l'une des clauses WHERE, qu'elles obtiennent à partir de deux DropDownLists distinctes. Les résultats de ces requêtes sont identiques, sauf pour les colonnes time1/time2.

string query1 = "select Name = t1.name, time1=(SELECT hours FROM table3 WHERE street=list1.selectedvalue), t2.address from [table1] t1 INNER JOIN [table2] t2 ON t1.param = t2.param ORDER BY Name"; 

string query2 = "select Name = t1.name, time1=(SELECT hours FROM table3 WHERE street=list2.selectedvalue), t2.address from [table1] t1 INNER JOIN [table2] t2 ON t1.param = t2.param ORDER BY Name"; 

(S'il vous plaît ne vous embêtez pas avec la syntaxe des requêtes ci-dessus, je l'ai exécuté les requêtes et ils ont tous deux retourner les résultats escomptés.)

je voudrais fusionner ces deux tables en une seule ensemble de données (ou toute autre structure pouvant être utilisée comme source de données pour une grille). La colonne 'nom' est unique, d'autres peuvent l'être aussi, je peux vérifier. Je veux que les colonnes de la table finale pour ressembler à

Nom Time1 Time2 Analyse Adresse

  • L'ordre des colonnes n'a pas d'importance beaucoup, mais si ce n'est pas trop de travail, je préférerais l'ordre ci-dessus.
  • Je voudrais effectuer des opérations mathématiques sur time1 et time2, et par conséquent mettre à jour la colonne d'analyse. Suis-je préférable de le faire en C# ou JS?

Actuellement, j'utilise une datatable pour collecter les résultats des deux requêtes. J'ai essayé d'utiliser la méthode Datatable.Merge, mais cela double le nombre de lignes (un peu comme une jointure externe) en dépit de nommer les colonnes de la même façon (dans les colonnes.Add (new DataColumn ...)

Merci d'avoir regardé :) J'apprécie votre contribution.

  Datatable dt1 = new datatable; 
      Datatable dt2 = new datatable; 

      dt1.Columns.Add(new DataColumn("name", typeof(string))); 
      dt1.Columns.Add(new DataColumn("time1", typeof(int))); 
      dt1.Columns.Add(new DataColumn("time2", typeof(int))); 
      dt1.Columns.Add(new DataColumn("analysis", typeof(string))); 
      dt1.Columns.Add(new DataColumn("address", typeof(string))); 

      SqlDataReader dr = cmd1.ExecuteReader(); 
      while (dr.Read()) 
      { 
       DataRow drow = new DataRow(); 
       drow["name"] = dr["name"].ToString(); 
       drow["time1"] = dr["time1"]; 
       drow["address"] = dr["CurrentTime"].ToString(); 
       dt1.Rows.Add(drow); 
      } 
      dr.Close(); 

      dr = cmd2.ExecuteReader(); 
      while (dr.Read()) 
      { 
       DataRow drow = new DataRow(); 
       drow["time2"] = dr["time1"]; 
       drow["analysis"] = "I need javascript here"; 
       dt2.Rows.Add(drow); 
      } 
      dr.Close(); 

      dt1.Merge (dt2); 
      this.GridView1.DataSource = dt1; 
      this.GridView1.DataBind; 
+1

Existe-t-il des données communes entre les tables qui créent une condition de jointure interne? Comment savez-vous quelles lignes de 'str1' devraient fusionner avec quelles lignes de 'str2'? –

+0

Vous pouvez essayer de définir l'action de schéma manquant avec la fonction de fusion pour éviter le comportement de jointure externe. – Thurein

+0

Salut Lazy Bob, les champs 'nom' dans les deux requêtes sont uniques pour chaque ligne, et sont la base de la correspondance pour les deux valeurs de 'heures' – Freakishly

Répondre

1

La réponse peut être trouvée ici. Avec quelques réglages, je l'ai fait pour faire exactement ce que je voulais. http://social.msdn.microsoft.com/forums/en-US/adodotnetdataproviders/thread/f122d7f4-3b7d-4d93-bd0f-8bb57cd990a4/

+0

Cette réponse a été marquée pour retrait en raison d'être une réponse de liaison uniquement. Pourriez-vous s'il vous plaît le modifier afin qu'il y ait suffisamment de détails pour être utile aux lecteurs sans qu'ils aient besoin de cliquer sur le lien? – josliber

Questions connexes