[英]MySQL group rows with same ID in one row
I try to do something like a pivot in MySQL but I am stuck. 我尝试在MySQL中做类似枢轴的操作,但是我被卡住了。
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. 因此,我设法将每个subSysName都放置为列。
The next step should be, that every entry with the same UUID is also in the same row, like this: 下一步应该是,每个具有相同UUID的条目也位于同一行中,如下所示:
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.
我以为我可以通过联接(JOIN subsys_stat b ON ap.uuid = b.uuid)来做到这一点,但这不起作用。
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
. 另外,
CASE
表达式应在MAX
类的聚合函数中使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.