Имам таблица в моята база данни, която изглежда (може да има същите кортежи в таблицата):
+-------------+---------+--------+
| ProductName | Status | Branch |
+-------------+---------+--------+
| P1 | dead | 1 |
| P1 | dead | 2 |
| P1 | dead | 2 |
| P2 | expired | 1 |
+-------------+---------+--------+
Трябваше да покажа резултата след като (атрибутът Branch е динамичен):
+-------------+---------+--------+
| ProductName | Branch 1|Branch 2|
+-------------+---------+--------+
| P1 | dead | dead|
| P2 | expired | OK |
+-------------+---------+--------+
След малко помощ измислих следното решение:
ЗАДАВАНЕ @sql =НУЛА; ИЗБЕРЕТЕ GROUP_CONCAT (DISTINCT CONCAT ( "COALESCE (GROUP_CONCAT (DISTINCT случай, когато клон =" "", клон, "" "след това край на състоянието)," "ОК" ") КАТО", CONCAT ("Клон", клон) ) ) В @sql ОТ Таблица1; SET @sql = CONCAT ("SELECT productName,", @sql, " ОТ Таблица1 ГРУПИРАНЕ ПО ИМЕ на продукта "); ПРИГОТВЕТЕ stmt ОТ @sql; ИЗПЪЛНИТЕ stmt;
Той показва точния резултат, от който се нуждаех:
+-------------+---------+-----------+
| productName | Branch1 | Branch2 |
+-------------+---------+-----------+
| p1 | dead | dead |
| p2 | expired | OK |
+-------------+---------+-----------+
Искам тази процедура да се трансформира в един SQL оператор. Опитах, но не можах да намеря решение. Как мога да постигна това? Благодаря
Отговори:
0 за отговор № 1Този точен резултат (тъй като той се получава от съхранената процедура, с броя на колоните, определен по време на изпълнение), не може да бъде възпроизведен в един SQL оператор за избор. Не е възможно.