我有一个名为categories的表,如下所示。
mysql> select * from categories;
+-------------+--------------------+-----------------+---------------------+------+------+------+------+------+
| category_id | T1 | T2 | T3 | T4 | T5 | T6 | T7 | T8 |
+-------------+--------------------+-----------------+---------------------+------+------+------+------+------+
| 1 | Popcorn | Regular Pack | NULL | NULL | NULL | NULL | NULL | NULL |
| 2 | Ice creams | Cone | KoolCool | Choclate | NULL | NULL | NULL | NULL
| 3 | SoftDrinks | Pepsi | Tin | Large | Lemon | NULL | NULL | NULL |
| 3 | SoftDrinks | Coke | Tin | Large | Apple | Mix | NULL | NULL |
我有T1栏中提到的不同类别的物品(爆米花,冰淇淋,软饮料) 每个类别最高可达T8级
通过以下查询,我支持T3级
SELECT t1,
IF( t3 IS NULL, CONCAT('(', category_id, ')'), GROUP_CONCAT(CONCAT(t3,'(',category_id,')'))) AS consildated_Data
FROM categories
GROUP BY 1;
但是现在我需要支持T8级别
请有人告诉我如何实现这个目标
比方说,如果PopCorn在T3 Level结束,那么我需要它的T2 Level和在括号中的category_id。
+--------------------+-----------------+---------------------------------------------------------+
| t1 | consildated_Data |
+-------------------------------------+---------------------------------------------------------+
| Popcorn | Regular Pack(1) |
| Soft Drinks | Pepsi,Tin,Large,Lemon(3)
| Soft Drinks | Coke,Tin,Large,Apple,Mix(3) |
Ice creams Cone,KoolCool,Choclate(2)
--------------------+-----------------+---------------------------------------------------------+
这是我的sqlfiddle
答案 0 :(得分:2)
我会像这样返回指定的结果集:
SELECT c.t1
, CONCAT(
TRIM(TRAILING ',' FROM
CONCAT_WS(','
,IFNULL(c.t2,'')
,IFNULL(c.t3,'')
,IFNULL(c.t4,'')
,IFNULL(c.t5,'')
,IFNULL(c.t6,'')
,IFNULL(c.t7,'')
,IFNULL(c.t8,'')
)
)
,'('
,c.category_id
,')'
) AS consolidated_data
FROM categories c
只需将所有t1
至t8
与逗号分隔符连接在一起;从中删除所有尾随逗号,并在parens中添加category_id。
鉴于样本数据,GROUP BY
子句不起作用,它会消除行,而您只能使用category_id(3)返回一行。