2016-07-22 6 views
0

Ich habe eine MySQL-Tabelle:Wie funktioniert das Pivotieren mit MySQL?

enter image description here

I-Ausgang will etwas weiter unten wie (eine Art Schwenk), den Wert im Stift Bleistift und Klebstoff Spalte aus dem letzten Zeitstempel aufgefüllt werden muss.

enter image description here

+1

zeigen uns, was Sie –

+0

versucht, habe ich diese Abfrage versucht: wählen Kategorie, max (wenn ('Produkt' = 'Stift', Markierung, Null)) als 'Stift', max (if ('Produkt' = 'Stift', Markierung, Null)) als 'Bleistift', max (if (' product' = 'Stift') , flag, null)) als 'Glue' von Product_Table Dies gibt mir die Ausgabe, aber ich bin mir nicht sicher, wie Sie den Flag-Wert für den neuesten Zeitstempel – user2462471

Antwort

2

Sie können Ihr Ergebnis erzielen, indem eine Dreh einer Unterabfrage zu tun, die für jede Category die neuesten Datensätze identifiziert - Product Gruppe.

SELECT t1.Category, 
     MAX(CASE WHEN t1.Product = 'pen' THEN CONCAT(t1.Flag, '(productid-', t1.Product_ID, ')') ELSE NULL END) AS Pen, 
     MAX(CASE WHEN t1.Product = 'pencil' THEN CONCAT(t1.Flag, '(productid-', t1.Product_ID, ')') ELSE NULL END) AS Pencil, 
     MAX(CASE WHEN t1.Product = 'glue' THEN CONCAT(t1.Flag, '(productid-', t1.Product_ID, ')') ELSE NULL END) AS Glue 
FROM yourTable t1 
INNER JOIN 
(
    SELECT Category, Product, MAX(timestamp) AS timestamp 
    FROM yourTable 
    GROUP BY Category, Product 
) t2 
    ON t1.Category = t2.Category AND 
     t1.Product = t2.Product AND 
     t1.timestamp = t2.timestamp 
GROUP BY t1.Category 

unter Folgen Sie dem Link für eine laufende Demo: Diese

SQLFiddle

+1

erhalten Große Antwort !!! – Blank

+0

Thankyou Tim so viel ... es hat für mich gearbeitet .u hat meinen Tag gerettet – user2462471

0

Versuchen:

select 
    Category, 
    max(case when Product = 'pen' then concat(`Flag`, '(productid-', Product_ID, ')') else null end) as `Pen`, 
    max(case when Product = 'pencil' then concat(`Flag`, '(productid-', Product_ID, ')') else null end) as `Pencil`, 
    max(case when Product = 'glue' then concat(`Flag`, '(productid-', Product_ID, ')') else null end) as `Glue` 
from (
    select t1.* 
    from yourtable t1 
    join (
     select Product, Category, max(`timestamp`) as `timestamp` 
     from yourtable 
     group by Product, Category 
    ) t2 on t1.Product = t2.Product and t1.`timestamp` = t2.`timestamp` and t1.Category = t2.Category 
) t 
group by Category 
+0

Danke für die schnelle Antwort, das hat auch für mich funktioniert. Danke so viel :) – user2462471