Verwenden Sie OVER (PARTITION BY ) anstatt des Group By

Recht, jetzt bin ich mit temp-Tabelle in meiner sql-Abfrage, aber ich wollen, verwenden Sie die Partition, Von der Funktion statt.

Meine temp-Tabelle Abfrage wird unten gegeben:

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;

Erhalte ich das erwartete Ergebnis als gut, aber ich möchte diesen Vorgang mithilfe von Partition-Funktion , ich habe versucht, aber Ergebnis ist nicht korrekt -

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

Ausgabe:

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

Aber ich brauche:

Vivek 0001 6200.00 300.00 
Bitte Einrücken, Ihren code so, dass er zeigt, wie code und formatieren Sie es mit irgendeinem Grad von Vernunft... es ist wirklich schwer zu Lesen.
Wenn Sie möchten, dass das Ergebnis gruppiert, müssen Sie der Gruppe durch. Der ganze Zweck der Fenster-Funktionen ist nicht nicht "reduzieren" in der Ergebnismenge.
möglich, Duplikat der Kombinieren Sie mehrere Ergebnisse in einer Unterabfrage, die in einem Komma-getrennten Wert
In jedem Fall brauchen Sie nicht eine temporäre Tabelle. Lookup etwas über die with - Anweisung, die Sie tun, um ein group by über die group by (das wird auch Ihr problem lösen).

InformationsquelleAutor user3169167 | 2014-01-07

Schreibe einen Kommentar