2017-02-13 5 views
1

HILFE!Erstellen Sie Spalten basierend auf 1 Wert Spalte und 1 Bedingung Spalte

Ich bin nicht in der Lage, dieses einfache MYSQL-Problem zu lösen.

Ich habe Daten in diesem Format in einer Quelltabelle:

Date_type  Date    Activity_id 
Preferred  13/02/16 07:30 1 
Planned   13/02/16 08:30 1 
Actual   13/02/16 09:30 1 
Preferred  14/02/16 07:30 2 
Planned   14/02/16 08:30 2 
Actual   14/02/16 09:30 2 

Und ich brauche es, wie dies in einem Bericht:

Activity_id Preferred_Date Planned_Date  Actual_DateDate    
1   13/02/16 07:30 13/02/16 08:30 13/02/16 09:30 
2   14/02/16 07:30 14/02/16 08:30 14/02/16 09:30 

Ich habe jetzt seit Stunden googeln und ich habe alle Varianten von Select ausprobiert, falls ich weiß. Ich sehe nicht, wie ich das umsetzen kann. Danke für deine Hilfe, Jungs, wirklich.

+2

Und ????????????????????????? –

+0

Jorge, ich habe den Text bearbeitet. Ich kann die Tabellen nicht abrufen und habe zwei Bilder aus Excel hinzugefügt. Es tut uns leid. –

+0

Im Allgemeinen werden Probleme der Datenanzeige am besten in der Präsentationsebene gelöst. – Strawberry

Antwort

2

Dies ist ein guter Weg, um eine Dreh in MySQL zu tun:

SELECT Activity, 
    MAX(CASE `Type` WHEN 'Preferred' THEN `Value` END) AS Preferred_date, 
    MAX(CASE `Type` WHEN 'Planned' THEN `Value` END) AS Planned_date, 
    MAX(CASE `Type` WHEN 'Actual' THEN `Value` END) AS Actual_date 
FROM MyTable 
GROUP BY Activity; 

I Type und Value in Back-Zecken begrenzt, weil sie MySQL Reserved Words sind. Normalerweise bevorzuge ich reservierte Wörter als Spaltennamen zu vermeiden.


Re Ihre Kommentare:

A Dreh Abfrage ist, wenn Sie Ihre Daten in Zeilen und Sie bestimmen Werte in Spalten zu formatieren, in der Regel in einem anderen Feld auf dem Wert abhängig. In Ihrem Fall verfügen Sie beispielsweise über Datenzeilen für verschiedene Type-Werte, und Sie möchten die Zeitstempelwerte in Spalten abbilden, die durch den entsprechenden Typ gekennzeichnet sind. Dies ist ein Drehpunkt von Zeilen in Spalten.

MAX() ist mehr oder weniger willkürlich, ich könnte MIN() auch verwendet haben. Es bedeutet lediglich, dass wir eine Aggregationsfunktion auf eine Reihe von Zeilen anwenden, die nach jedem einzelnen Wert von Activity gruppiert sind.

CASE ist ein Ausdruck in SQL. Die Syntax ist ziemlich selbsterklärend, aber Sie müssen wissen, dass der gesamte CASE Ausdruck NULL zurückgibt, wenn kein Fall mit den Daten übereinstimmt. Und MAX()/MIN() ignorieren NULL. Sie sollten also für jeden Typ in jeder Zeilengruppe nur einen eindeutigen Nicht-NULL-Wert erhalten.

+0

Ich habe MAX-Logik hier nicht bekommen. Kannst du es bitte etwas erklären? –

+0

Ich denke, ich habe die Frage nicht klar angegeben, ich weiß nicht, woher das Pivot-Tag kam, aber der Fall/dann/Ende könnte es lösen! Danke, Bill. Ich schätze deine Hilfe! –

+0

Ich habe das Pivot-Query-Tag hinzugefügt, weil Sie das tun. –

Verwandte Themen