2017-02-14 44 views
-2

我使用MS SQL Server 2010的 我有一個表有幾百萬行,像這樣的最頻繁的值:如何獲得在一個表中

Number  | SITE |Events_Work |Events_Nonwork 
---------- | -------- | --------- | ------------ 
1234567  | 1508  | 1   | 4 
1234567  | 8263  | 1   | 0 
1234567890 | 1905  | 0   | 1 
1234567890 | 1697  | 0   | 0 
1234567890 | 1697  | 1   | 0 
22222222 | 2151  | 2   | 2 
22222222 | 1905  | 3   | 1 
22222222 | 1575  | 0   | 0 
22222222 | 1575  | 4   | 1 
1234567  | 1475  | 0   | 0 
1234567  | 1110  | 0   | 0 
1234567  | 1508  | 0   | 0 

,我應該找到每一個最常用的網站不同的數字基於:工作時間事件總數(Events_Work)和evenets Non_work_time(Events_Nonwork)總和。

任何建議如何做到這一點?

+1

沒有SQL Server ** 2010 ** - 我們有2000年,2005年,2008年,2008年R2,2012年,2014年和2016年 - 請選擇! –

回答

0
with tmp1 as (
    select Number, Site, eventsw + eventsNW total 
    from YourTable 
    group by Number, Site, eventsw + eventsNW 
) 
select Number, Site, max(total) 
from tmp1 
group by Site, Number 

如果我明白你的問題很好這應該是你想要的。

0

嘗試找出兩列的總和中的每個數字和排名每個站點上開始使用窗口功能排首位每個號碼的網站:

select * 
from (
    select t.*, 
     rank() over (
      partition by number order by s desc 
      ) rnk 
    from (
     select t.*, 
      sum(coalesce(events_work, 0) + coalesce(events_nonwork, 0)) over (
       partition by number, 
       site 
       ) s 
     from your_table t 
     ) t 
    ) t 
where rnk = 1;