2016-05-17 85 views
0

如果我有一個包含重複值的列的表。如何向該表添加一列,以顯示錶中有多少條目包含該值。SQL Server將頻率列添加到現有表中

我知道,你可以使用:

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

得到的頻率,但我怎麼在新列的原始表顯示這個?

+0

請您舉個例子嗎? –

+4

爲什麼把它放在桌子上?每次記錄更改時需要更新 –

+0

我有建築物幾何數據,並且有大量建築物對應相同的ID。我想用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 
相關問題