带文本搜索的案例陈述

时间:2013-07-22 18:45:43

标签: sql search case where

我有一个用于Sales Analysis的数据集(使用SQL Server Management Studio)。对于此示例,当代理商填写销售电话或帐户审核时,他们会(通过下拉列表)列出他们在电话/评论中讨论的主题。然后,客户在事后购买了相应的产品列(在本例中,我使用的是汽车)。我想也许一个案例陈述是要做的事情,但在esscence我需要弄清楚这个人建议的任何制造商是否存在于产品栏中:

enter image description here

所以在这个例子中,在第1行中,他们建议马自达和丰田(单独用“;”)和马自达出现在产品线中,这样就可以标记为有效。 3号线,他们建议本田,但这个人最终得到了一辆吉普车,所以没有效果。等等。

我希望它是动态的(可能是一个EXISTS ??),这样我就不必编写/维护类似'有效'= CASE WHEN主题,如'%Mazada%'和产品如'% Mazada%',“Yes”,“No”WHEN .....

思想?

1 个答案:

答案 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;

这是基于topicproducts字段中似乎都提到“品牌”的事实。如果你没有这样的表,你可以这样做:

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;

然而,这可能不起作用,因为在现实世界中,文本更复杂。它有拼写错误,缩写和同义词。无法保证两个列表上都有匹配的单词,依此类推。但是,如果你的文字足够干净,这种方法可能会有所帮助。