我有一个用于Sales Analysis的数据集(使用SQL Server Management Studio)。对于此示例,当代理商填写销售电话或帐户审核时,他们会(通过下拉列表)列出他们在电话/评论中讨论的主题。然后,客户在事后购买了相应的产品列(在本例中,我使用的是汽车)。我想也许一个案例陈述是要做的事情,但在esscence我需要弄清楚这个人建议的任何制造商是否存在于产品栏中:
所以在这个例子中,在第1行中,他们建议马自达和丰田(单独用“;”)和马自达出现在产品线中,这样就可以标记为有效。 3号线,他们建议本田,但这个人最终得到了一辆吉普车,所以没有效果。等等。
我希望它是动态的(可能是一个EXISTS ??),这样我就不必编写/维护类似'有效'= CASE WHEN主题,如'%Mazada%'和产品如'% Mazada%',“Yes”,“No”WHEN .....
思想?
答案 0 :(得分:0)
如果你有一个Product
表,那么你可能会得到这样的东西:
select RowId, Topic, Products,
(case when exists (select 1
from Products p
where t.Topic like '%'+p.brand+'%' and
t.Products like '%'+p.brand+'%'
)
then 'Yes' else 'No'
end) as Effective
from t;
这是基于topic
和products
字段中似乎都提到“品牌”的事实。如果你没有这样的表,你可以这样做:
with products as (
select 'Mercedes' as brand union all
select 'Mazda' union all
select 'Toyota' . . .
)
select RowId, Topic, Products,
(case when exists (select 1
from Products p
where t.Topic like '%'+p.brand+'%' and
t.Products like '%'+p.brand+'%'
)
then 'Yes' else 'No'
end) as Effective
from t;
然而,这可能不起作用,因为在现实世界中,文本更复杂。它有拼写错误,缩写和同义词。无法保证两个列表上都有匹配的单词,依此类推。但是,如果你的文字足够干净,这种方法可能会有所帮助。