Можете да направите това с помощта на CASE
изявление:
SELECT p.productid, p.da, p.ig, p.des ,GROUP_CONCAT(CASE WHEN ck.title ='St Code' THEN cv.value ELSE NULL END) КАТО 'St Code' ,GROUP_CONCAT (СЛУЧАЙ, КОГАТО ck.title ='Rear Les' THEN cv.value ELSE NULL END) КАТО 'Rear Les'FROM Products pJOIN code_values cv ON p.productid =cv.pidJOIN code_keys ck ON cv.codeid =ck.codeidGROUP BY p. productid;
Ако имате неизвестен брой code_keys
можете да опитате тази динамична заявка:
SET @sql =NULL;SELECT GROUP_CONCAT(DISTINCT CONCAT('GROUP_CONCAT(СЛУЧАЙ, КОГАТО `title` =''', `title`, ''' THEN cv.value ELSE NULL END) КАТО `', `title`, '`' ) ) INTO @sqlFROM code_keys ck JOIN code_values cv ON cv.codeid =ck.codeid;SET @sql =CONCAT('SELECT p.productid, p.da, p.ig, p.des, ', @sql,' ОТ Продукти p ПРИСЪЕДИНЕТЕ code_values cv ON p.productid =cv.pid ПРИСЪЕДИНЕТЕ code_keys ck ON cv.codeid =ck.codeid GROUP BY p.productid ');ПРИГОТВИТЕ stmt ОТ @sql;ИЗПЪЛНИТЕ stmt;ОТМЕНИ ПОДГОТОВКА stmt;
Изход:
<предварителен код>| ПРОДУКТ | DA | IG | DES | ST КОД | ЗАДНИ ЛЕС |------------------------------------------------------- ---------| 5 | 78 | 33 | 23 | ST 102 200 R | 12 000 33 || 8 | 88 | 13 | 21 | ST 100 101 R | 11 223 34 |