我想根据聚合结果创建一个新列。例如,输入数据(从here借来)如下:
Company Date Flag
------- ------- -----
001 201201 Y
001 201201 N
001 201202 N
001 201202 N
001 201202 Y
我想要的输出是
Company Date Flag Percentage
------- ------- ----- ----------
001 201201 Y 0.5
001 201201 N 0.5
001 201202 N 0.66
001 201202 Y 0.66
001 201202 Y 0.66
也就是说,我需要根据Company
和Date
将聚合(标记列中的Y百分比)加回原始表。
请注意,这只是玩具数据。在我的实际工作中,我必须加入许多表来获得所需的表并找到一些聚合。我做的是如下:
SELECT *
FROM (
/* Lots of joins go here to obtain Table A */
) AS A
JOIN (
SELECT Percentage
FROM (
/* Percentage aggregation from Table A */
) AS P
) AS B
ON A.xxx = B.xx
问题是我在计算聚合Percentage
时必须再次生成表A.是否可以将聚合连接回所需的表而无需重新生成所需的表两次?感谢。
答案 0 :(得分:2)
旗帜百分比= Y
Declare @YourTable table (Company varchar(25),Date int, Flag varchar(25))
Insert Into @YourTable values
('001',201201,'Y'),
('001',201201,'N'),
('001',201202,'N'),
('001',201202,'N'),
('001',201202,'Y')
Select *
,Pct = cast(sum(case when Flag='Y' then 1.0 else 0 end) over (Partition By Company,Date)/count(*) over (Partition By Company,Date) as decimal(10,2))
From @YourTable
返回
Company Date Flag Pct
001 201201 Y 0.50
001 201201 N 0.50
001 201202 N 0.33
001 201202 N 0.33
001 201202 Y 0.33