如何在SQL中将字符串拆分为单列并在同一列中进行排列

时间:2018-06-21 06:27:51

标签: mysql sql

我有一列如下

Products
jeans,oil
jeans,shampoo

我想拆分字符串,并使用SQL在同一列中使用它。我想要的结果是

Products  count
jeans     2
oil       1
shampoo   1

您能否指导我获得此结果

谢谢

2 个答案:

答案 0 :(得分:4)

您正在将CSV数据存储在SQL表中,这不是一件好事。但是看来您正在努力摆脱这一点,这是一件好事。这是将SUBSTRING_INDEX与联合使用的一种选择:

SELECT Products, COUNT(*) AS count
FROM
(
    SELECT SUBSTRING_INDEX(Products, ',', 1) AS Products FROM yourTable
    UNION ALL
    SELECT SUBSTRING_INDEX(Products, ',', -1) FROM yourTable
) t
GROUP BY Products
ORDER BY
    count DESC, Products;

enter image description here

Demo

答案 1 :(得分:1)

首先,您需要将数据分成两列,例如

    SELECT CASE
     WHEN name LIKE '%,%' THEN LEFT(name, Charindex(' ', products) - 1)
     ELSE name
   END,
   CASE
     WHEN name LIKE '%,%' THEN RIGHT(name, Charindex(' ', Reverse(products)) - 1)
   END
   FROM   YourTable 

然后您需要将此表与同一张表合并...,最终代码将如下所示...

    select count( distinct abc), abc from 
    (
    SELECT CASE
       WHEN PA_NAME LIKE '% %' THEN LEFT(PA_NAME, Charindex(' ', PA_NAME) - 1)
       ELSE PA_NAME
    END [abc]
    FROM   phparty

    union all

    SELECT CASE
     WHEN PA_NAME LIKE '% %' THEN RIGHT(PA_NAME, Charindex(' ', Reverse(PA_NAME)) -1)
   END [abc]
    FROM   phparty
    ) t group by abc 

在这里您可以用your_column_name替换pa_name