【发布时间】:2014-01-07 12:46:31
【问题描述】:
现在我在我的 sql 查询中使用临时表,但我想使用 Partition By 函数。
我的临时表查询如下:
drop table #Temp;
create table #Temp
(
NAME varchar(50),
EMPID varchar(50),
SS MONEY,
PP MONEY
);
insert into #Temp
select * From
(
select
p1.NAME,
p1.EMPID,
case when p1.AmtPayer = 'SELF' then sum(p1.Salary) else 0 end as S,
case when p1.AmtPayer = 'MANAGER' then sum(p1.Salary) else 0 end as P
from Candidate p1
group by p1.Name, p1.EMPID, p1.AmtPayer
) as P;
select
t.NAME,
t.EMPID,
sum(t.SS) as 'SELF PAID',
sum(t.PP) as 'PARTY PAID'
from #Temp t
group by t.NAME, t.EMPID;
我也得到了预期的结果,但我想使用分区函数执行此操作,我尝试过但结果不准确 -
select
NAME,
EMPID,
sum(Salary) over (partition by AmtPayer) as Total
from dbo.Candidate
输出是:
维维克 0001 300.00 维维克 0001 300.00 维维克 0001 6200.00 维维克 0001 6200.00 维维克 0001 6200.00但我需要:
维维克 0001 6200.00 300.00【问题讨论】:
-
请缩进您的代码,以便它显示为代码并在一定程度上对其进行格式化......这真的很难阅读。
-
如果你想对结果进行分组,你需要使用 group by。窗口函数的全部目的不是不是“减少”结果集。
-
无论如何,您都不需要临时表。查找有关
with语句的内容,它允许您通过 group by 执行 group by(这也将解决您的问题)。
标签: sql-server window-functions