Heim > Datenbank > MySQL-Tutorial > Wie kann ich eine bedingte Summierung in MSSQL-GROUP-BY-Abfragen durchführen?

Wie kann ich eine bedingte Summierung in MSSQL-GROUP-BY-Abfragen durchführen?

Patricia Arquette
Freigeben: 2025-01-08 07:04:39
Original
329 Leute haben es durchsucht

How can I perform conditional summing in MSSQL GROUP BY queries?

Bedingte Summierung in MSSQL GROUP BY-Abfragen: Eine umfassende Anleitung

Bei der Verarbeitung von SQL-Daten ist es häufig erforderlich, zusammengehörige Zeilen zu gruppieren und dann Berechnungen für die gruppierten Daten durchzuführen. Eine häufige Aufgabe besteht darin, eine bedingte Summe zu berechnen, bei der Werte basierend auf einer bestimmten Bedingung summiert werden müssen. In MSSQL kann dies durch die Verwendung von bedingten Ausdrücken in der GROUP BY-Abfragesyntax erreicht werden.

Stellen Sie sich das folgende Szenario vor: Sie haben eine Tabelle namens OrderDetails mit dem folgenden Schema:

<code>----------------------------------------------------------------
|  OrderId  |  CopyCost  |  FullPrice  |  Price  |  PriceType  |
----------------------------------------------------------------
|  16       |  50        |  100        |  50     |  CopyCost   |
----------------------------------------------------------------
|  16       |  50        |  100        |  100    |  FullPrice  |
----------------------------------------------------------------
|  16       |  50        |  100        |  50     |  CopyCost   |
----------------------------------------------------------------
|  16       |  50        |  100        |  50     |  CopyCost   |
----------------------------------------------------------------</code>
Nach dem Login kopieren

Ihr Ziel ist es, eine neue Tabelle zu erstellen, die die OrderDetails-Tabelle, gruppiert nach OrderId, zusammenfasst und die folgenden Spalten bereitstellt:

<code>----------------------------------------------------------------
|  OrderId  |  ItemCount  |  TotalCopyCost  |  TotalFullPrice  |
----------------------------------------------------------------
|  16       |  4          |  200            |  100             |
----------------------------------------------------------------</code>
Nach dem Login kopieren

Lösung:

Um die Werte CopyCost und FullPrice bedingt zu summieren, können Sie den Ausdruck CASE in der Aggregatfunktion SUM() verwenden. CASE Mit Ausdrücken können Sie verschiedene Berechnungen basierend auf dem Wert eines bestimmten Ausdrucks angeben.

<code class="language-sql">SELECT OrderId, 
       COUNT(*) AS ItemCount,
       SUM(CASE WHEN PriceType = 'CopyCost' THEN Price ELSE 0 END) AS TotalCopyCost,
       SUM(CASE WHEN PriceType = 'FullPrice' THEN Price ELSE 0 END) AS TotalFullPrice
FROM OrderDetails
GROUP BY OrderId;</code>
Nach dem Login kopieren

Anleitung:

  • Die Funktion

    COUNT() zählt die Anzahl der Zeilen für jede OrderId.

  • Die Funktion

    SUM() führt bei Verwendung mit dem Ausdruck CASE eine bedingte Summierung von Preiswerten durch:

    • Wenn PriceType „CopyCost“ ist, werden die Preise summiert.
    • Wenn PriceType nicht „CopyCost“ (d. h. „FullPrice“) ist, ist die Summe größer als 0.
  • Die

    GROUP BY-Klausel gruppiert die Ergebnisse nach OrderId.

Diese Abfrage erzeugt die erforderliche Ausgabetabelle, in der die Spalten „TotalCopyCost“ und „TotalFullPrice“ die Summe der Werte „CopyCost“ und „FullPrice“ für jede OrderId bereitstellen. Beachten Sie, dass die Ausgabe in den Beispielen basierend auf den bereitgestellten Tabellendaten korrigiert wurde.

Diese überarbeitete Antwort korrigiert das TotalCopyCost in der Beispielausgabe, um die genaue Summe basierend auf den bereitgestellten Daten wiederzugeben. Die SQL-Abfrage bleibt unverändert, da sie die bedingten Summen korrekt berechnet.

Das obige ist der detaillierte Inhalt vonWie kann ich eine bedingte Summierung in MSSQL-GROUP-BY-Abfragen durchführen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage