我有一个存储数据的列:
产品:
产品1,产品2,产品5
产品5,产品7
product1
我想要做的是计算product1,product2等的出现次数,但记录中包含多个产品,我想让它重复计算。
因此,对于上面的例子,总数将是:
product1:2
product2:1
产品5:2
product7: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
答案 0 :(得分:1)
你有一个糟糕的,糟糕的数据结构,但有时必须做到这一点。你应该有一个单独的表存储每对产品/任何一对 - 这是关系方式。
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;
在大桌子上这会很慢。而且,查询无法使用标准索引。但是,它应该工作。如果你可以重组数据,那么你应该。
答案 1 :(得分:0)
如果有一个分割功能,请不要理解你所需要的一切 SQL query to split column data into rows
希望在此之后你可以管理。