2017-07-16 117 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