2016-03-29 19 views
0

私はMySQLでピボットのようなことをしようとしますが、私は立ち往生しています。同じ行のIDを持つMySQLグループの行

私はこのようになりますテーブルだ:

first query:このクエリの結果は次のようになります

SELECT distinct 
    p.id, p.uuid, p.kpiDate, p.kpiTime, 
    CASE 
    WHEN p.subSysName = 'CMONE' THEN p.status 
    ELSE '' 
    END AS CMONE, 
    CASE 
    WHEN p.subSysName = 'DISODAY' THEN p.status 
    ELSE '' 
    END AS DISODAY, 
    CASE 
    WHEN p.subSysName = 'DIIN_HFFF' THEN p.status 
    ELSE '' 
    END AS DIIN_HFFF, 
    CASE 
    WHEN p.subSysName = 'DIIN_PAL' THEN p.status 
    ELSE '' 
    END AS DIIN_PAL, 
    CASE 
    WHEN p.subSysName = 'DISO_FAL' THEN p.status 
    ELSE '' 
    END AS DISO_FAL, 
    CASE 
    WHEN p.subSysName = 'MBATCH' THEN p.status 
    ELSE '' 
    END AS MBATCH, 
    CASE 
    WHEN p.subSysName = 'MO_BATCH' THEN p.status 
    ELSE '' 
    END AS MO_BATCH, 
    CASE 
    WHEN p.subSysName = 'QINTER' THEN p.status 
    ELSE '' 
    END AS QINTER, 
    CASE 
    WHEN p.subSysName = 'ZFIREWALL' THEN p.status 
    ELSE '' 
    END AS ZFIREWALL 

FROM subsys_stat p 
order by p.kpiDate, p.kpiTime 

:私は次のクエリでstartetd

original Table

それで、すべてのsubSysNameを列として配置するように管理しました。

result table

私はそれをどのように操作を行うことができます。

次のステップは、同じUUIDを持つすべてのエントリはこのように、同じ行にもあること、すべきですか? 私は(JOIN subsys_stat b ON ap.uuid = b.uuid)結合でこれを行うことができると思ったが、これはうまくいきません。あなたがあなたのクエリにグループを追加する必要があり

+1

最大のケースはどうですか – Strawberry

答えて

2

:また

SELECT MIN(p.id), p.uuid, p.kpiDate, p.kpiTime, 
     MAX(CASE WHEN p.subSysName = 'CMONE' THEN p.status END) AS CMONE, 
     MAX(CASE WHEN p.subSysName = 'DISODAY' THEN p.status END) AS DISODAY, 
    ... etc 
FROM subsys_stat p 
GROUP BY p.uuid, p.kpiDate, p.kpiTime 
ORDER BY p.kpiDate, p.kpiTime 

CASE式はMAXのような集約関数の内部で使用する必要があります。

+0

うわー、これはとても簡単に見えます。今私はこの場合MAXが何をするのか理解する必要があります。どうもありがとう。 – LStrike

関連する問題