прямо сейчас Я использую таблицу temp в своем sql-запросе, но вместо этого хочу использовать функцию Partition By.Используйте OVER (PARTITION BY) вместо Group 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
Выход:
Vivek 0001 300.00 Vivek 0001 300.00 Vivek 0001 6200.00 Vivek 0001 6200.00 Vivek 0001 6200.00
Но мне нужно:
Vivek 0001 6200.00 300.00
Пожалуйста отступы ваш код так, что он показывает как код и форматировать его с некоторой степенью здравомыслия ... это действительно трудно прочитать. –
Если вы хотите, чтобы результат был сгруппирован, вам нужно использовать группу. Вся цель оконных функций не является ** не ** «уменьшать» набор результатов. –
Возможный дубликат [Объединение нескольких результатов в подзапросе в одно значение, разделенное запятыми] (http://stackoverflow.com/questions/111341/combine-multiple-results-in-a-subquery-into-a-ingle- значение, разделенное запятыми) –