it-swarm.com.de

SQL Server: SUM () mehrerer Zeilen, einschließlich where-Klauseln

Ich habe eine Tabelle, die ungefähr so ​​aussieht:

  PropertyID     Amount     Type       EndDate
 --------------------------------------------
   1              100       RENT        null              
   1              50        WATER       null         
   1              60        ELEC        null        
   1              10        OTHER       null      
   2              70        RENT        null
   2              10        WATER       null

Einer Immobilie werden mehrere Artikel in Rechnung gestellt, die auch mehrmals in Rechnung gestellt werden. Zum Beispiel könnte RENT 12 Mal (über ein Jahr) an Objekt Nr. 1 abgerechnet werden, aber die einzigen, die mich interessieren, sind diejenigen mit ENDDATE von null (mit anderen Worten, aktuell).

Ich möchte erreichen:

    PropertyId       Amount
  --------------------------       
      1                220
      2                80

Ich habe versucht, so etwas zu tun:

SELECT
   propertyId,
   SUM() as TOTAL_COSTS
FROM
   MyTable

Wäre ich in der SUMME jedoch gezwungen, mehrere Auswahlen vorzunehmen, um den aktuellen Betrag für jede Gebührenart zurückzubringen? Ich konnte sehen, dass dies chaotisch wurde und ich hoffe auf eine viel einfachere Lösung

Irgendwelche Ideen?

25
Jimmy

Dadurch werden die Summen pro Eigenschaft und Typ zurückgegeben

SELECT  PropertyID,
        TYPE,
        SUM(Amount)
FROM    yourTable
GROUP BY    PropertyID,
            TYPE

Dies bringt nur aktive Werte zurück

SELECT  PropertyID,
        TYPE,
        SUM(Amount)
FROM    yourTable
WHERE   EndDate IS NULL
GROUP BY    PropertyID,
            TYPE

und dies wird Summen für Eigenschaften zurückbringen

SELECT  PropertyID,
        SUM(Amount)
FROM    yourTable
WHERE   EndDate IS NULL
GROUP BY    PropertyID

......

45
Adriaan Stander

Versuche dies:

SELECT
   PropertyId,
   SUM(Amount) as TOTAL_COSTS
FROM
   MyTable
WHERE
   EndDate IS NULL
GROUP BY
   PropertyId
8
gbn

du meinst getiing sum (Anzahl aller Typen) für jede Eigenschaft, bei der EndDate null ist:

SELECT propertyId, SUM(Amount) as TOTAL_COSTS
  FROM MyTable
 WHERE EndDate IS NULL
GROUP BY propertyId
5
manji

hört sich so an, als wollten Sie etwas wie:

select PropertyID, SUM(Amount)
from MyTable
Where EndDate is null
Group by PropertyID
4
CSharpAtl

Die WHERE -Klausel wird immer konzeptionell angewendet (der Ausführungsplan kann natürlich tun, was er will), bevor GROUP BY. Es muss vor dem GROUP BY In der Abfrage stehen und fungiert als Filter vor Dinge sind SUMmed, wie die meisten Antworten hier funktionieren.

Sie sollten auch die optionale HAVING -Klausel kennen, die kommen muss nach dem GROUP BY. Dies kann verwendet werden, um die resultierenden Eigenschaften von Gruppen nach GROUPing zu filtern - zum Beispiel HAVING SUM(Amount) > 0

2
Cade Roux

Verwenden Sie einen allgemeinen Tabellenausdruck, um eine Gesamtsummenzeile hinzuzufügen. top 100 Ist erforderlich, damit order by Funktioniert.

With Detail as 
(
    SELECT  top 100 propertyId, SUM(Amount) as TOTAL_COSTS
    FROM MyTable
    WHERE EndDate IS NULL
    GROUP BY propertyId
    ORDER BY TOTAL_COSTS desc
)

Select * from Detail
Union all
Select ' Total ', sum(TOTAL_COSTS) from Detail
2
Joel