Utiliser OVER (PARTITION BY ) à la place du Groupe Par

droit maintenant, je suis à l'aide de la table temporaire dans ma requête sql, mais je veux utiliser la Partition En fonction de la place.

Mon temp requête création de table est donnée ci-dessous:

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;

J'obtiens le résultat escompté, mais je veux effectuer cette opération à l'aide de la fonction de Partition , j'ai essayé mais le résultat n'est pas exact -

select
 NAME,
 EMPID,
 sum(Salary) over (partition by AmtPayer) as Total
from dbo.Candidate 

De sortie est:

Vivek 0001 300.00 
Vivek 0001 300.00 
Vivek 0001 6200.00 
Vivek 0001 6200.00 
Vivek 0001 6200.00 

Mais j'ai besoin de:

Vivek 0001 6200.00 300.00 
Veuillez indenter votre code, de sorte qu'il apparaît que le code et de le formater avec un certain degré de bon sens... c'est vraiment dur de lire cela.
Si vous souhaitez que le résultat groupés, vous devez utiliser group by. L'objectif de l'utilisation des fonctions de la fenêtre n'est pas pas "réduire" le jeu de résultat.
double possible de Combiner plusieurs résultats dans une sous-requête dans un seul valeurs séparées par des virgules
Dans tous les cas, vous n'avez pas besoin d'une table temporaire. Recherche de quelque chose à propos de la with déclaration, ce qui permet de le faire, un groupe de plus d'un groupe par (qui aidera à résoudre votre problème).

OriginalL'auteur user3169167 | 2014-01-07