Sql 计算关键字在逗号分隔列中出现的次数?

Sql 计算关键字在逗号分隔列中出现的次数?,sql,sql-server,count,Sql,Sql Server,Count,我有一列存储如下数据: 产品: 产品1、产品2、产品5 产品5,产品7 产品1 我想做的是计算product1、product2等的出现次数。但是如果记录包含多个产品,我希望它加倍计算它们 因此,对于上述示例,总计为: 产品1:2 产品2:1 产品5:2 产品7:1 我怎样才能做到这一点 我试着这样做: select count(case when prodcolumn like '%product1%' then 'product1' end) from myTable 这将获得pr

我有一列存储如下数据:

产品: 产品1、产品2、产品5 产品5,产品7 产品1

我想做的是计算product1、product2等的出现次数。但是如果记录包含多个产品,我希望它加倍计算它们

因此,对于上述示例,总计为: 产品1:2 产品2:1 产品5:2 产品7:1

我怎样才能做到这一点

我试着这样做:

    select count(case when prodcolumn like '%product1%' then 'product1' end) from myTable
这将获得product1的计数,但如何扩展到每个产品

我也试过这样的方法:

    select new_productvalue, count(new_productvalue) from OpportunityExtensionBase 
    group by new_ProductValue
但这列出了所有被发现的产品的不同组合以及它们被发现的次数

这些产品不会改变,所以硬编码是可以的

编辑:以下是对我有用的东西

WITH Product_CTE (prod) AS 
(SELECT
  n.q.value('.', 'varchar(50)')
    FROM (SELECT cast('<r>'+replace(new_productvalue, ';', '</r><r>')+'</r>' AS xml) FROM table) AS s(XMLCol)
      CROSS APPLY s.XMLCol.nodes('r') AS n(q)
    WHERE n.q.value('.', 'varchar(50)') <> '')
    SELECT prod, count(*) AS [Num of Opps.] FROM Product_CTE GROUP BY prod

你有一个糟糕的数据结构,但有时你不得不将就一下。您应该有一个单独的表来存储每一对产品/任何一对-这是关系方式

with prodref as (
      select 'product1' as prod union all
      select 'product2' as prod union all
      select 'product5' as prod union all
      select 'product7' as prod
     )
select p.prod, count(*)
from prodref pr left outer join
     product p
     on ','+p.col+',' like '%,'+pr.prod+',%'
group by p.prod;

这在一张大桌子上会很慢。而且,查询不能使用标准索引。但是,它应该起作用。如果您可以重新构造数据,那么您应该这样做。

如果一个拆分函数


希望在此之后您可以管理。

下次避免在列中使用逗号分隔的值完全同意您的意见,但这是我得到的并且必须处理的问题。不幸的是:我同意,使用逗号分隔的值肯定不是我喜欢的,但这是我在这种情况下面临的问题。谢谢你的代码,但我最终在网上找到了一些对我更好的东西,更新了我原来的帖子。