SQL:将值添加到STDEVP计算
我有下表SQL:将值添加到STDEVP计算,sql,sql-server,sql-server-2012,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
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返回amount列,但如果记录数小于某个值“x”,则给定键的记录数将永远不会超过x,然后我希望添加零以说明剩余部分
例如,如果“x”为6:
对于键1,我需要stdevp10,5,0,0,0
对于键2,我需要stdevp1,2,3,50,20,0
对于键3,我需要stdevp5,4,5,0,0,0
我只需要在计算中加上零。我可以向表中插入记录,但这似乎相当乏味。这似乎很复杂-为每个键填充数据。以下是一种方法:
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行。然后,左连接将引入可用行,最多可达最大值。这似乎很复杂-为每个键填充数据。以下是一种方法:
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行。然后,左连接将引入可用行,最大值为。谢谢@Gordon。我幻想着我可以做一些像stdevpamount,rep0,6-count这样的事情,但是交叉连接到左连接不会太困难。非常感谢。@spielerspieler。stdevp是一个聚合函数,它从多行获取其值。你的解释将是一个非常不同的功能。我知道这一点,谢谢。我只是希望有办法操纵这个函数。我用交叉连接到左连接没有问题,只花了我几分钟的时间来写。老实说,我甚至不知道交叉连接是一件事,但它完全有道理。就像R中的expand.grid一样。再次感谢。谢谢@Gordon。我幻想着我可以做一些像stdevpamount,rep0,6-count这样的事情,但是交叉连接到左连接不会太困难。非常感谢。@spielerspieler。stdevp是一个聚合函数,它从多行获取其值。你的解释将是一个非常不同的功能。我知道这一点,谢谢。我只是希望有办法操纵这个函数。我用交叉连接到左连接没有问题,只花了我几分钟的时间来写。老实说,我甚至不知道交叉连接是一件事,但它完全有道理。就像R中的expand.grid一样。再次非常感谢。