MySQL группировка дает 4 строки вместо 1 - PullRequest
0 голосов
/ 13 июля 2020

Мне трудно сгруппировать строки так, как нужно. Это дает мне 4 строки вместо 1. Я уверен, что это что-то простое, но я не могу понять.

SELECT DISTINCT
  th.name Serial,
CASE WHEN td.parameter = 4854455 THEN TRIM(LEADING '0' FROM td.text) ELSE NULL END Auto_PF,
CASE WHEN td.parameter = 797902 THEN TRIM(LEADING '0' FROM td.text) ELSE NULL END Auto_IC,
CASE WHEN td.parameter = 797402 THEN TRIM(LEADING '0' FROM td.text) ELSE NULL END Auto_NIC,
CASE WHEN td.parameter = 4854430 THEN TRIM(LEADING '0' FROM td.text) ELSE NULL END Auto_E46
FROM thisdata td
INNER JOIN this th
    ON td.thisid = th.id
WHERE td.parameter IN ('4854455', '797902', '797402', '4854430', '6332168',
'6332160', '798102', '12000003', '12020956', '12020947', '12015253')
AND td.created >= (NOW() - INTERVAL 1 MONTH)
GROUP BY Serial, td.parameter, td.text

... Result1

1 Ответ

0 голосов
/ 13 июля 2020

Я думаю, вам следует агрегировать только по имени, а затем вращать выражения CASE:

SELECT
    th.name Serial,
    MAX(CASE WHEN td.parameter = 4854455 THEN TRIM(LEADING '0' FROM td.text) END) Auto_PF,
    MAX(CASE WHEN td.parameter = 797902  THEN TRIM(LEADING '0' FROM td.text) END) Auto_IC,
    MAX(CASE WHEN td.parameter = 797402  THEN TRIM(LEADING '0' FROM td.text) END) Auto_NIC,
    MAX(CASE WHEN td.parameter = 4854430 THEN TRIM(LEADING '0' FROM td.text) END) Auto_E46
FROM thisdata td
INNER JOIN this th
    ON td.thisid = th.id
WHERE
    td.parameter IN ('4854455', '797902', '797402', '4854430', '6332168', '6332160',
                     '798102', '12000003', '12020956', '12020947', '12015253') AND
    td.created >= (NOW() - INTERVAL 1 MONTH)
GROUP BY
    th.name;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...