SQL:为STDEVP计算添加值

时间:2017-02-13 22:47:04

标签: sql sql-server sql-server-2012

我有下表。

Key | Count | Amount  
----| ----- | ------ 
1   |     2 |   10  
1   |     2 |   15  
2   |     5 |    1  
2   |     5 |    2  
2   |     5 |    3  
2   |     5 |   50  
2   |     5 |   20  
3   |     3 |    5  
3   |     3 |    4  
3   |     3 |    5  

抱歉,我无法弄清楚是谁制作了上面的表格。

我在SQL Server Management Studio 2012上运行它。

我想要使用金额列的stdevp返回但是如果记录数小于某个值'x'(对于给定的密钥永远不会超过x个记录),那么我想添加零到占余下的。

例如,如果'x'是6:

  • 对于密钥1,我需要stdevp(10,5,0,0,0,0)
  • 对于密钥2,我需要stdevp(1,2,3,50,20,0)
  • 对于密钥3,我需要stdevp(5,4,5,0,0,0)

我只需要能够在计算中添加零。我可以在我的桌子上插入记录,但这似乎相当繁琐。

1 个答案:

答案 0 :(得分:0)

这似乎很复杂 - 每个键的填充数据。这是一种方法:

string1 = [x.strip() for x in f.readlines()]
string1 = string1[3:7]
mat = np.empty((0, 6))
for string in string1:
    mat = np.vstack([mat, np.matrix(string.strip('[]'))])

这个想法是with xs as ( select 0 as val, 1 as n union all select 0, n + 1 from xs where xs.n < 6 ) select k.key, stdevp(coalesce(t.amount, 0)) from xs cross join (select distinct key from t) k left join (select t.*, row_number() over (partition by key order by key) as seqnum from t ) t on t.key = k.key and t.seqnum = xs.n group by k.key; 为每个键生成6行。然后左连接引入可用的行,最多可达。