gpt4 book ai didi

MySQL 将具有相同 ID 的行分组在一行中

转载 作者:太空宇宙 更新时间:2023-11-03 11:49:36 25 4
gpt4 key购买 nike

我尝试在 MySQL 中做一些类似 pivot 的事情,但我被卡住了。

我有一张看起来像这样的表:

original Table

我从以下查询开始:

    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

这个查询的结果是这样的:

first query

所以我设法将每个 subSysName 放置为列。

下一步应该是,具有相同 UUID 的每个条目也在同一行中,如下所示:

result table

我该怎么做?我以为我可以通过加入 (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

关于MySQL 将具有相同 ID 的行分组在一行中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36277528/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com