简体   繁体   中英

MySQL group rows with same ID in one row

I try to do something like a pivot in MySQL but I am stuck.

I got a table which looks like this:

原始表

I startetd with the following 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

The result of this query looks like this:

第一个查询

So I managed it to place every subSysName as column.

The next step should be, that every entry with the same UUID is also in the same row, like this:

结果表

How can I do that? I thought I could do this with a join (JOIN subsys_stat b ON ap.uuid = b.uuid) but this doesn't work.

You need to add grouping to your query:

 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

Also, CASE expressions should be used inside an aggregate function like MAX .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM