sql >> Databasteknik >  >> RDS >> Mysql

MySQL GROUP_CONCAT med COLUMN SPLIT

Om du vet antalet GROUP_CONCAT-poster (jag menar att 3 fält kombineras i fallet med ID =1 och 2 fält kombineras i fallet med 2 etc), så finns det ett smutsigt sätt.

SELECT ID, SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(NAME), ',', 1), ',', -1) AS CODE1,
If(  length(GROUP_CONCAT(NAME)) - length(replace(GROUP_CONCAT(NAME), ',', ''))>1,  
       SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(NAME), ',', 2), ',', -1) ,NULL) 
           as CODE2,
   SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(NAME), ',', 3), ',', -1) AS CODE3
FROM test
GROUP BY ID;

Utdata:

ID  CODE1   CODE2   CODE3
1   A          B    C
2   D       (null)  E
3   F          G    H

Frågan ovan förutsätter att du GROUP_CONCAT använder tre fält. Om du dynamiskt genererar en fråga kan du prova. SQLFIDDLE

EDIT: Obs! KODEN kan variera för varje RAD.(Ignorerar detta)



  1. Motsvarar LIMIT och OFFSET för SQL Server?

  2. Hur man lägger till en främmande nyckelbegränsning till en befintlig tabell i SQL Server (T-SQL)

  3. MySQL GROUP_CONCAT flyktar

  4. PRIMARY KEY-definition i MySQL CREATE TABLE-satsen