2017-11-21 1 views
0

Hier ist meine Tabelle:Wie erhält man die Summe einer bestimmten Spalte in einem bestimmten Zeilenbereich in SQL Server?

Id  Name  Price  Session 
---------------------------------------- 
1  abcd  1000  07.00 AM 
1  abcd  1000  07.00 AM 
5  mnop  NULL  12.00 AM 
5  mnop  NULL  12.00 AM 
5  mnop  1000  12.00 AM 

Dieses Ergebnis, dass ich hoffe:

Id  Name  Price  Session 
-------------------------------------- 
1  abcd  2000  07.00 AM 
5  mnop  1000  12.00 AM 

Wie kann ich Spalte Price bei bestimmten Zeile Bereich zusammenzufassen?

+6

Hinweis: GROUP BY, SUM. – jarlh

+3

Randnotiz: Ich werde niemals verstehen, warum Leute ** nicht eindeutige ** Spalten 'Id' nennen. Das macht überhaupt keinen Sinn. –

+0

Sie sollten [GROUP BY'] (https://www.w3schools.com/sql/sql_groupby.asp) mit Aggregatfunktionen betrachten. Sie müssen nach allen Spalten gruppieren, die Sie in Ihrem Ergebnis benötigen, und die Summe (Summe) der einen Spalte zusammenfassen, die Sie zusammenfassen möchten. – hage

Antwort

0

Anderer Ansatz ohne group by Klausel ist SUM() .. over

SELECT DISTINCT 
    Id, Name, 
    SUM(Price) OVER(PARTITION BY ID, Name, Session) [Price], 
    [Session] 
FROM <table>; 

Ergebnis:

Id  Name  Price  Session 
-------------------------------------- 
1  abcd  2000  07.00 AM 
5  mnop  1000  12.00 AM 
+1

Nun, es ist immer möglich, eine Abfrage zu verschleiern, aber warum sollten Sie das tun. Warum eine Aggregation pro Zeile konstruieren, um sie später zu löschen? Für mich ergibt das keinen Sinn. –

0

Brauchen Sie es?

SELECT Id,Name,SUM(Price) SumPrice,Session 
FROM [Your table] 
GROUP BY Id,Name,Session 
1

Fügen Sie eine group by-Klausel in Ihre Abfrage ein. Alle ausgewählten Spalten, die keine Aggregatfunktion verwenden, werden in der Gruppierung nach Klausel aufgelistet.

Select id ,name ,session ,sum (price) 
From table 
Group by id, name, session 
Verwandte Themen