2016-05-17 9 views
0

重複する値を含む列を持つテーブルがある場合。その表に、その値を含む項目の数を表示する列をその表に追加するにはどうすればよいですか。SQL Serverが既存のテーブルに頻度の列を追加します。

私はあなたが使用できることを知っている:

select id, COUNT(id) as freq 
    from mytable 
    group by id 
    order by freq desc 

を周波数を取得するが、どのように私は、元のテーブルに新しい列でこれを表示していますか?

+0

私たちに例を挙げてください。 –

+4

なぜそれをテーブルに入れるのですか?レコードが変更されるたびに更新する必要があります –

+0

私はジオメトリデータを作成しており、同じIDに対応する1トンの建物があります。 STUnion関数を使ってそれらをマージしたいと思います。 –

答えて

1

これを行う必要がある場合は、ビューを作成することをお勧めします。

Create View vMyTable As 
Select M.*, F.Freq 
    From MyTable M 
    Join (Select id, Count(id) Freq From MyTable Group By id) F On F.id = M.id 
2

このテーブルを挿入/更新/削除する頻度と、その頻度を選択する頻度によって異なります。

Joe Cが示唆しているように、私はおそらく眺めに行きます。

しかし、頻繁に挿入/更新/削除しないで、実際にテーブルに挿入したい場合は、挿入、更新、削除時にトリガーを行うことができます。 。それは悲惨な挿入、更新、および削除のパフォーマンスですので、その点に留意してください。

create trigger dbo.MyTable_IUD 
on dbo.MyTable 
after insert, update, delete 
as 
begin 
    update m 
    set _freq = counts.freq 
    from dbo.MyTable m 
    join 
    (
     select id, count(1) [freq] 
     from dbo.MyTable 
     where id in 
     (
      select id from inserted 
      union select id from deleted 
     ) 
     group by id 
    ) counts on m.id = counts.id; 
end; 
go 
関連する問題