Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да генерирате тази SQL заявка като централна таблица

Можете да направите това с помощта на 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 |

Вижте този SQLFiddle




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL - Дайте ми 3 посещения само за всеки тип

  2. Защо все още имам нужда от MySQL Connector, инсталиран на компютъра, въпреки че имам правилните пакети NuGet?

  3. Анализирайте дъмп на XML данни от Уикиречник в MySQL база данни с помощта на PHP

  4. Как да конвертирате времето в секунди във формат HH:MM:SS в MySQL?

  5. Функция Lead и Lag в Mysql