У меня есть таблица в моей базе данных, которая выглядит как (там могут быть одинаковыми кортежей в таблице):Как устранить повторение одних и тех же строк
+-------------+---------+--------+
| 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 |
+-------------+---------+--------+
После некоторой помощи я придумал следующее решение:
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'GROUP_CONCAT(case when branch = ''',
branch,
''' then status ELSE NULL end) AS ',
CONCAT('Branch',branch)
)
) INTO @sql
FROM Table1;
SET @sql = CONCAT('SELECT productName, ', @sql, '
FROM Table1
GROUP BY productName');
PREPARE stmt FROM @sql;
EXECUTE stmt;
Результат показал, как:
+-------------+---------+-----------+
| productName | Branch1 | Branch2 |
+-------------+---------+-----------+
| p1 | dead | dead,dead |
| p2 | expired | (null) |
+-------------+---------+-----------+
SQL Fiddle.
Теперь я хочу показать статус продукта как «ОК», а не null, когда статус равен нулю, а также не нужно конкатенировать статус, если в таблице повторяется повторение продукта. отсоритровать. Заранее спасибо.
Thats большой @Minhai .. я ранее пытался COALESCE(), но поставил его в неправильное место :). Слово «Ветвление» объединяется с именем «Ветви». Как я могу его удалить ... Мне нужно только имя ветки из таблицы в заголовке. Я попытался, но не смог разобрать его. Спасибо снова. – Hasnain