2010-12-24 7 views
1

列内の異なる値を数えたいと思います。列は、今、この列からのカウント値

Locations 
Street1 
Street2 
Street3 
Street1,Street2 
Street2, 
Street1,Street2,Street3 

カウントなどのデータが
Street1ようにする必要があります含まれている(3)
STREET2(4)
Street3(2)

私がやっての簡単な方法を考えることはできません
+3

データベース内でコンマ区切りになっていますか?それは人生を簡単にするつもりはない... –

+1

wtf?あなたのデータベースは何ですか? SQL ServerまたはExcel? :) – RPM1984

+0

@ RPM1984:linq-to-sqlタグは、SQL Serverを示します。 – Ani

答えて

2

これはLINQ to SQLを使用します。

テーブルのすべての行をクライアントに戻してから、LINQ to Objectsを使用してクエリを実行するのは簡単な方法です(実行することができれば)。

var query = myDataContext 
      .MyTable 
      .AsEnumerable() 
      .SelectMany(row => row.Locations.Split(',')) 
      .GroupBy(location => location) 
      .Select(group => new { Location = group.Key, Count = group.Count() }); 

あなたは文字列の代わりにその形式でのシーケンスをしたい場合は、との最後の行に置き換えます。別のノートで

.Select(group => string.Format("{0} ({1})", group.Key, group.Count()); 

を、私はは強くデータベースを正規化勧めスキーマ区切られたリストを列に格納することはお勧めできません。

1
var result = Locations 
    .SelectMany(s => s.Split(',')) 
    .GroupBy(s => s, (loc,b) => new { loc, b.ToList().Count}); 
関連する問題