0

我有一个用于销售分析的数据集(使用 SQL Server Management Studio)。对于此示例,当代理完成销售电话或客户审核时,他们会(通过下拉列表)列出他们在电话/审核中讨论的主题。然后是客户事后购买的产品的对应列(在此示例中,我使用的是汽车)。我在想也许一个案例陈述是一种方法,但本质上我需要弄清楚该人建议的任何制造商是否存在于产品列中:

在此处输入图像描述

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

我希望它是动态的(可能是 EXISTS ??)这样我就不必编写/维护类似 'Effective'=CASE WHEN 像 '%Mazada%' 这样的主题和像 '%Mazada%' 这样的产品, “是”, “否” 当......

想法?

4

1 回答 1

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;

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

于 2013-07-22T19:18:20.033 回答