簡體   English   中英

MySQL將一行具有相同ID的行分組

[英]MySQL group rows with same ID in one row

我嘗試在MySQL中做類似樞軸的操作,但是我被卡住了。

我有一張看起來像這樣的桌子:

原始表

我從以下查詢開始:

    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

該查詢的結果如下所示:

第一個查詢

因此,我設法將每個subSysName都放置為列。

下一步應該是,每個具有相同UUID的條目也位於同一行中,如下所示:

結果表

我怎樣才能做到這一點? 我以為我可以通過聯接(JOIN subsys_stat b ON ap.uuid = b.uuid)來做到這一點,但這不起作用。

您需要將分組添加到查詢中:

 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類的聚合函數中使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM