2009-05-21 15 views
1

Ich habe eine SQL-Tabelle, in der ich in jeder Zeile das Land und die Stadt eines Ortes für Dinge hinterlasse. Zum Beispiel:Liste der Städte und Länder aus einer SQL-Tabelle abrufen

 
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 

Ich möchte eine Liste erzeugen, die von Stadt und Land und jede Stadt zeigen sich nur ein einziges Mal in Folge bestellt wird.

Ich würde gerne wissen, wie man dies in SQL und Linq To SQL auf elegante Weise lösen kann.

+0

Bitte klären, was "es gibt nur eine Stadt aus der Tabelle" bedeutet, wie ich diesen Ausdruck nicht analysieren kann. –

+0

Ich bemerkte, dass ich in SQL diese die folgende Art und Weise lösen: DISTINCT TOP SELECT (100) PROZENT Stadt, Land FROM table ORDER BY Land Es wäre noch schön, den Linq Weg aber – gyurisc

+1

kennen, um die „Top 100 Hinzufügen Prozent "ist eine Möglichkeit, ORDER BY in eine Ansicht zu erzwingen. Die meisten DBAs und alle bei M $ würden dies abraten. Wenn Sie dies als Sicht speichern, legen Sie die Reihenfolge bei dem Aufruf der Sicht fest. Wenn Sie nicht sind, müssen Sie nicht 100 Prozent übersteigen. – Bill

Antwort

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

Dies wird wahrscheinlich eine viel schnellere Option für die eindeutige Option sein. –

+0

Beim Ausführen des Ausführungsplans .... sind sie identisch. – CSharpAtl

+0

@CSharpAtl: Sie können die Spalte 'record' nicht mit distinct zurückgeben. –

1

ich herausgefunden, wie dies auch mit Linq zu tun. Es scheint in Ordnung zu sein. Nicht sicher über die Leistung aber

 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; 
      } 
     } 
Verwandte Themen