2009-05-21 5 views
1

J'ai une table SQL où dans chaque rangée je stocke le pays et la ville d'un emplacement de choses. Par exemple:Obtenir la liste des villes et des pays d'une table SQL

 
record1, New York, USA 
record2, Rome, Italy 
record3, Milano, Italy 
record3, Birghiman, UK 
record4, London, UK 
record5, London, UK 
record6, London, UK 
record7, Birmingham, UK 

Je voudrais générer une liste qui est ordonnée par pays et par ville, et chaque ville montrent qu'une seule fois dans le résultat.

Je voudrais savoir comment résoudre ceci dans SQL et Linq To SQL d'une manière élégante.

+0

Veuillez clarifier ce que «il n'y a qu'une seule ville de la table» signifie que je ne peux pas analyser cette phrase. –

+0

je remarquai que dans SQL je peux résoudre ce la façon suivante: SELECT DISTINCT TOP (100) ville pour cent, pays FROM table ORDER BY pays Il serait toujours agréable de connaître la façon Linq si – gyurisc

+1

Ajout du « Top 100 Pourcentage "est un moyen de forcer un ORDER BY dans une vue. La plupart des DBA et tout le monde à M $ découragerait cela. Si vous l'enregistrez en tant que vue, placez la commande Par sur l'appel à la vue. Si vous ne l'êtes pas, vous n'avez pas besoin de Top 100%. – Bill

Répondre

9
select distinct country, city 
from <Table> 
order by country, city; 
1
SELECT MIN(record) AS record, City, Country 
FROM [MyTable] 
GROUP BY City, Country 
ORDER BY Country, City 
+0

Ce sera probablement une option beaucoup plus rapide à l'option distincte. –

+0

Lors de l'exécution du plan d'exécution .... ils sont identiques. – CSharpAtl

+0

@CSharpAtl: vous ne pouvez pas retourner la colonne 'record' avec le distinct. –

1

Je compris comment faire avec LINQ ainsi. Cela semble fonctionner correctement. Je ne suis pas sûr de la performance si

 var result = from p in table 
        group p by p.country into country_group 
        select new 
        { 
         country = country_group.Key, 
         cities = from ci in country_group 
            group ci by ci.city into city_group 
            select new { city = city_group.Key, cig = city_group } 
        };       


     foreach(var co in result) 
     { 
      string country = co.country; 

      foreach(var ci in co.cities) 
      { 
       string city = ci.city; 
      } 
     } 
Questions connexes