2017-07-16 104 views
0

我有兩個表計算模式如下

Table 1 

ColumnA ColumnB 
Account1 DeptA 
Account2 DeptA 
Account3 DeptA 
Account4 DeptB 
Account5 DeptB 


Table 2 

ColumnC ColumnA ColumnD ColumnE(Date) 
Deposit1 Account1 10 
Deposit1 Account2 20 
Deposit1 Account3 10 
Deposit2 Account1 10 
Deposit2 Account2 30 
Deposit2 Account3 30 
Deposit3 Account2 20 
Deposit3 Account3 10 

Deposit1 Account4 20 
Deposit1 Account5 20 
Deposit2 Account4 10 
Deposit2 Account5 20 



Expected Output 
Count Mode(ColumnD) ColumnC ColumnB 
2  10   Deposit1 Dept1  
2  30   Deposit2 Dept1 
1  10   Deposit3 Dept1 
2  20   Deposit1 Dept2 
1  10   Deposit2 Dept2 

我應該能夠計算ColumnD的模式,如下面的SQL 從表1, 對於給定的ColumnB(集團由SQL Server爲特定的方案ColumnB)爲該組中的所有ColumnA計算具有列D值的同一ColumnC的模式

如果我們觀察預期輸出,則Dept1具有Account1,Account2和Account3。如果我們觀察Deposit1也無論是在DEPT1和DEPT2但我們需要根據給定DEPT1和DEPT2計算模式

無論是存儲過程或SQL是有幫助的

+0

columnb(result)從哪裏來的?只能看到DeptA和B – maSTAShuFu

+0

可能重複的[TSQL模式(如中,中位數,模式)](https://stackoverflow.com/questions/23532027/tsql-mode-as-in-mean-median-mode) – maSTAShuFu

+0

columnB來自表1,外鍵ColumnA與表2關聯 – TechJump

回答

2

計算SQL模式是很容易 - 只需一個row_number()group by操作。我認爲以下是你正在做的事情:

select tt.* 
from (select t1.columnb, t2.columnc, t2.columnd, count(*) as cnt, 
      row_number() over (partition by t1.columnb, t2.columnc order by count(*) desc) as seqnum 
     from table2 t2 join 
      table1 t1 
      on t2.columna = t1.columna 
     group by t1.columnb, t2.columnc, t2.columnd 
    ) tt 
where seqnum = 1; 
+0

除了在子查詢中缺少group by,您可能還需要在row_number()分區中使用t2.columnc進行分區。 – ZLK

+0

@zlk。 。 。謝謝。 –

+0

如何在每個ColumnC的ColumnD數爲1時使用日期?在那種情況下,我應該能夠選擇模式 – TechJump