2009-05-21 5 views
1

У меня есть таблица SQL, где в каждой строке я храню страну и город местоположения вещей. Например:Получение списка городов и стран из таблицы 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 

Я хотел бы создать список, который упорядочен по стране и городу, и каждый город показать только один раз в результате.

Я хотел бы знать, как это можно решить в SQL и Linq To SQL элегантным способом.

+0

Просьба уточнить, что означает «есть только одна городская таблица» означает, поскольку я не могу разобрать эту фразу. –

+0

я заметил, что в SQL я могу решить эту следующим образом: SELECT DISTINCT TOP (100) ПРОЦЕНТ город, страна из-за стола ORDER BY страны Было бы еще хорошо знать, как Linq хотя – gyurisc

+1

Добавление в «Топ-100 Процент "- это способ заставить ORDER BY в представлении. Большинство администраторов баз данных и всех в M $ будут препятствовать этому. Если вы сохраняете это как представление, поместите запрос By по вызову представления. Если вы этого не сделаете, вам не нужно превышать 100 процентов. – Bill

ответ

1
SELECT MIN(record) AS record, City, Country 
FROM [MyTable] 
GROUP BY City, Country 
ORDER BY Country, City 
+0

Возможно, это будет гораздо более быстрый вариант для отдельного варианта. –

+0

При выполнении плана выполнения .... они идентичны. – CSharpAtl

+0

@CSharpAtl: вы не можете вернуть столбец «запись» с отдельным. –

1

я понял, как сделать это с помощью Linq, а также. Кажется, он работает нормально. Не уверен в производительности, хотя

 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; 
      } 
     } 
Смежные вопросы