我有一列如下
Products
jeans,oil
jeans,shampoo
我想拆分字符串,并使用SQL在同一列中使用它。我想要的结果是
Products count
jeans 2
oil 1
shampoo 1
您能否指导我获得此结果
谢谢
答案 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;
答案 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