我的表中有一列(表名称为rtp2k),其中包含多个用逗号分隔的值。我想拆分这些值,然后按数字列出它们。
我的专栏目前看起来像:
+-------+
| A2 |
| a,b,c |
| d,e,f |
| c,b |
| a,d,f |
| d,e,f |
+-------+
我知道这不是最佳做法。我没有创建该表。我只是应该从中提取数据以在截止日期之前使用mysqli,php和google图表制作图表。
我当前的查询看起来像这样,但是我不需要那里的ID,我想按值对它们进行计数,而不是逐一列出。
select
rtp2k.id,
SUBSTRING_INDEX(SUBSTRING_INDEX(rtp2k.a2, ',', numbers.n), ',', -1) a2
from
(select 1 n union all
select 2 union all select 3 union all
select 4 union all select 5) numbers INNER JOIN rtp2k
on CHAR_LENGTH(rtp2k.a2)
-CHAR_LENGTH(REPLACE(rtp2k.a2, ',', ''))>=numbers.n-1
order by
id, n
我希望查询返回以下内容:
a - 2
b - 2
c - 2
d - 3
e - 2
f - 3
基本上按值分隔字符串,并列出每个字符串中有多少个。
我当前的结果是: this table
我将非常感谢您的协助。
答案 0 :(得分:1)
SELECT ColumnID, Column1, value --Do not change 'value' name. Leave it as it is.
FROM tbl_Sample
CROSS APPLY STRING_SPLIT(Tags, ','); --'Tags' is the name of column containing comma separated values
所以我们有这个:tbl_Sample :
ColumnID| Column1 | Tags
--------|-----------|-------------
1 | ABC | a,b,c
2 | PQR | d,e,f
运行此查询后:
ColumnID| Column1 | value
--------|-----------|-----------
1 | ABC | a
1 | ABC | b
1 | ABC | c
2 | PQR | d
2 | PQR | e
2 | PQR | f