如何在单行中拆分逗号分隔的值,然后在SQL查询中按数字列出?

时间:2019-06-27 00:29:14

标签: mysql mysqli

我的表中有一列(表名称为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

我将非常感谢您的协助。

1 个答案:

答案 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