2016-04-08 8 views
0

So habe ich einen Vorfall Tabelle:Mehrere SQL-Abfrage in einer Tabelle

incidentID | threatlevel | typeOfIncident | region 
    __________________________________________________ 
     1   5    H1N5   West 
     2   5   Zombie Apocalyse West 
     3   5   Zombie Apocalyse South 
     4   5    H1N5   North 
     5   5   Zombie Apocalyse East 
     6   3   Zombie Apocalyse West 

Wie rufe ich die Summe von threatlevel für jede Region auf der Grundlage der zwei verschiedenen Arten von Vorfällen? Ich versuchte GROUP BY Region, aber es eliminiert alle ähnlichen Region.

Wie kann ich mich über all diese Werte in einer einzigen SQL-Anweisung abrufen:

Für z.B.

insgesamt threatlevel von 0 für Zombie Apocalypse aus dem Norden Region,

insgesamt threatlevel von 5 für Zombie Apocalypse aus der Region Süd,

insgesamt threatlevel von 5 für Zombie Apocalypse aus dem Osten,

insgesamt threatlevel von 8 für Zombie Apocalypse aus der Region West,

insgesamt threatlevel von 5 für H1N5 aus der Region Nord,

insgesamt threatlevel von 0 für H1N5 aus der Southregion

insgesamt threatlevel von 0 für H1N5 aus dem Eastregion

insgesamt threatlevel von 5 für H1N5 aus der Region West

zurück, so dass: 0 AS ZombieNorth, 5 AS ZombieSouth, 5 AS ZombieEast, 8 ZombieWest, 5 AS H1N5North, 0 AS H1N5South, 0 AS H1N5East, 5 H1N5West,

+0

Willkommen bei SO. Bitte lesen Sie [Welche Themen kann ich fragen] (http://stackoverflow.com/help/on-topic) und [Wie man eine gute Frage stellt] (http://stackoverflow.com/help/how-to -ask) Und [die perfekte Frage] (http://codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question/) – RiggsFolly

+1

Ich entfernte die überflüssigen Tags. Bitte markieren Sie die Frage mit der Datenbank, die Sie tatsächlich verwenden. –

Antwort

0

Try this:

SELECT typeOfIncident, 
     SUM(CASE WHEN region = 'West' THEN threatlevel ELSE 0 END) AS WestThreatLevel, 
     SUM(CASE WHEN region = 'East' THEN threatlevel ELSE 0 END) AS EastThreatLevel, 
     SUM(CASE WHEN region = 'North' THEN threatlevel ELSE 0 END) AS NorthThreatLevel, 
     SUM(CASE WHEN region = 'South' THEN threatlevel ELSE 0 END) AS SouthThreatLevel 
FROM mytable 
GROUP BY typeOfIncident 

Die SELECT Klausel verwendet bedingte Aggregation, um die Summe von threatlevel für jeden einzelnen region zu berechnen.

+0

@Janooying Können Sie Ihre Frage aktualisieren, um das erwartete Ergebnis für die bereitgestellten Beispieldaten aufzunehmen? –

2

In allen Datenbanken können Sie zwei Schlüssel für die GROUP BY verwenden:

select typeOfIncident, region, sum(threatlevel) as total_threatlevel 
from t 
group by typeOfIncident, region; 
0

Sie haben die folgenden in Ihrer Frage, die mich verwirrt:

insgesamt threatlevel von 8 für Zombie Apocalypse aus der West-Region

...

Gesamt threatlevel von 5 für Zombie Apocalypse aus der Westregion

Unter der Annahme, dass zweite

insgesamt threatlevel von 5 für H1N5 aus der Westregion

sein sollte Dann denke ich, die Antwort ist

SELECT 
region 
,typeOfIncident 
,SUM(threatLevel) 
FROM 
<table> 
GROUP BY 
region 
,typeOfIncident 
; 
Verwandte Themen