我是SQL和SSRS的新手。我面临以下问题-这里是数据库(简化):
Office Hours Year Quarter
A 3 2020 1
B 6 2020 2
C 9 2020 1
D 11 2020 2
E 5 2020 2
OX 20 2020 1
我已经创建了一个Marix,它将季度分组并显示每个办公室的小时数,除了最后一个,并有一个列计算总时数的百分比,不包括最后一个办公室(例如,办公室A有3小时34,所以8.823%,办公室B有6小时34,所以17.647%等等)。我想要实现的是创建一个如下所示的表:
OX Allocation | qt
------------------------
A 1.764
B 3.528
所以把牛的时间分配给其他的办公室。
但老实说,我无法做到这一点,我不知道如何开始选择Office OX (20)的特定值我知道这不是完全正确的季度方面,但我需要的是了解如何隔离列中的特定值并进行分配计算
提前感谢!
编辑:抱歉,我在第二个表中添加了百分比的解释。(我还更正了一个数字错误)
20 * (8.823/100) = 1.764 (对于办公室A) 20 * (17.647/100) = 3.528 (对于办公室B)
发布于 2021-05-04 23:56:43
如果要在SQL中执行此操作(在数据集查询中执行此类操作通常比使用SSRS表达式更容易),则可以执行以下操作
DECLARE @t TABLE(Office varchar(2), Hours decimal (10,6), Year int , Quarter int)
INSERT INTO @t VALUES
('A' , 3, 2020, 1),
('B' , 6, 2020, 2),
('C' , 9, 2020, 1),
('D' , 11, 2020, 2),
('E' , 5, 2020, 2),
('OX', 20, 2020, 1)
SELECT
a.*
, a.pc * o.[Hours] as OxAllocation
FROM
(
SELECT
*
, pc = Hours /SUM(Hours) OVER()
FROM @t
WHERE Office != 'OX'
) a
CROSS JOIN (SELECT * FROM @t WHERE Office = 'OX') o
这将产生以下结果
https://stackoverflow.com/questions/67386187
复制相似问题