2017-12-03 3 views
1

Ich frage eine MySQL-Datenbank ab, um die Ergebnisse der Testausführung zusammenzufassen. Meine Daten sehen ungefähr so ​​aus.Mysql-Abfrage, um das Auftreten einer Zeile dynamisch zu zählen und in Spalten zu konvertieren

+-+------------+----------------+ 
id|test_case_id|execution_status 
+-+------------+----------------+ 
1 |  1  |  passed 
+-+------------+----------------+ 
2 |  2  |  failed 
+-+------------+----------------+ 
3 |  2  |  passed 
+-+------------+----------------+ 
4 |  1  |  passed 
+-+------------+----------------+ 
5 |  2  |  failed 
+-+------------+----------------+ 

Wie abfragen ich diese Daten dieses zu erhalten:

+-+------------+------+------ 
id|test_case_id|passed|failed 
+-+------------+------+------ 
1 | 1  | 2 | 0 
+-+------------+------+------ 
2 | 2  | 1 | 2 
+-+------------+------+------ 

Der nächstgelegene ich etwas ist dieser Thread finden könnte: Mysql query to dynamically convert rows to columns. Da ich jedoch das Auftreten des Ausführungsstatus summieren muss, kann ich es nicht richtig zum Laufen bringen. Ich kann eine temporäre Tabelle, dynamisches SQL oder ein gespeichertes Proc aufgrund von Überlegungen zu Datenquelle und Ziel nicht verwenden. Jede Hilfe wird geschätzt!

Antwort

3

Ich denke, Sie können bedingte Aggregation verwenden. Ich weiß nicht, warum Sie das nicht in Ihren Suchen gefunden haben:

select test_case_id, sum(execution_status = 'passed') as passed, 
     sum(execution_status = 'failed') as failed 
from t 
group by test_case_id; 
+0

Oh Junge, ich war über-komplizierte Dinge, während das Offensichtliche fehlt. Vielen Dank! – atlantis

Verwandte Themen