Conversia datelor din rând în coloană în MySQL (Programare, Mysql)

Nilesh Barai a intrebat.
a intrebat.

Am un tabel MySQL care stochează date în acest format

Type|Month|Count
----+-----+-------
1   |9    |4
3   |9    |7
99  |9    |2
1   |10   |6
3   |10   |7
99  |10   |9
.......

Coloana tip poate deține oricare dintre cele 3 valori 1,3,99.Month va deține valori de la 1 la 12.Count poate fi orice aleatoriu.

Ieșirea pe care o doresc este ceva de genul acesta:

Month|Type1|Type3|Type99
-----+-----+-----+-------
9    |4    |7    |2
10   |6    |7    |9
................

Am dat peste acest Demo, dar nu am putut înțelege prea multe din ea.

Iată o mostră fiddle cu date demo.

Orice ajutor este apreciat.

Comentarii

  • Cel puțin creați o vioară cu datele de probă. –  > Por Mihai.
  • adăugat link către fiddle cu datele de probă –  > Por Nilesh Barai.
1 răspunsuri
Abhishek Gupta

Încercați interogarea de mai jos, ceea ce aveți nevoie este cunoscut ca pivot MYSQL și interogarea de mai jos rezolvă problema dvs.

CALEA STATICĂ

SELECT Month, 
 SUM(CASE WHEN Type = 1 THEN 'count' ELSE 0 END) AS Type1,
 SUM(CASE WHEN Type = 3 THEN 'count' ELSE 0 END) AS Type3,  
 SUM(CASE WHEN Type = 99 THEN 'count' ELSE 0 END) AS Type99
FROM my_table
GROUP BY Month

CALEA DINAMICĂ

utilizați GROUP_CONCAT cu CONCAT

SET @sql = NULL;
SELECT
    GROUP_CONCAT(DISTINCT 
    CONCAT('SUM(CASE WHEN Type= ', 
    Type, ' THEN count ELSE 0 END) AS '
    , 'Type', Type))
INTO @sql
FROM
  my_table;

SET @sql = CONCAT('SELECT Month, ', @sql, ' 
                  FROM my_table 
                   GROUP BY Month');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

Comentarii

  • @Nilesh Barai, a fost de ajutor? –  > Por Abhishek Gupta.
  • Nu funcționează. Afișează valorile 0 pentru coloanele type3 și type99 –  > Por Nilesh Barai.
  • asta este ceea ce am nevoie. Simplu și elegant!!! –  > Por Nilesh Barai.
  • @Mihai: Nu sunteți singurul care cunoaște mysql, vă rugăm să vă referiți la stackoverflow.com/questions/26263917/…  > Por Abhishek Gupta.
  • @Mihai: Am făcut copy paste din propriul meu concept, consultați acel link. –  > Por Abhishek Gupta.

Tags: