首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tsql:在每行多个字段中搜索一组给定的字符串值

问Tsql:在每行多个字段中搜索一组给定的字符串值
EN

Stack Overflow用户
提问于 2014-06-23 20:58:11
回答 1查看 349关注 0票数 0

我在以下问题上遇到了麻烦,必须以一种足够通用的方式报告促销活动的总销售额,以便我可以通过订阅来处理常规的用户请求。(甚至让用户按需获取数据)

我正在尝试为SSRS报告编写一个查询,该查询将接受来自允许多脉冲值的文本参数的输入。示例(‘Code1,Code2,Code3’)…然后在下面的示例表中搜索所有四个销售“ID”字段-返回每个DocumentNo、LineNo_组合,其中任何一个提供的代码出现在任何一个ID字段中。这四个字段不能为空,但可以为空字符串。一个订单行可以应用多个代码,但每个字段只能应用一个代码。每个DocumentNo,LineNo_组合应该只在输出中出现一次,这样我就可以对数量求和并获得正确的总数。

代码语言:javascript
复制
[DocumentNo] [varchar](20) NOT NULL
[LineNo_] [int] NOT NULL
[SalesDiscountReasonID] [varchar](20) NOT NULL
[CouponID] [varchar](30) NOT NULL
[CampaignID] [varchar](20) NOT NULL
[PromotionCodeID] [varchar](20) NOT NULL
[qty] [Int] NOT NULL

我不能更改数据仓库中数据的结构,我也不能期望经常要求此报告的用户跟踪使用了哪种类型的促销优惠券、活动、SalesDiscount、PromoCode来实施销售,因为他们不设置销售或进行订单的数据输入。

EN

回答 1

Stack Overflow用户

发布于 2014-06-23 21:03:16

我认为你可以用like做任何你想做的事情

代码语言:javascript
复制
where (','+@Codes+',' like '%,'+SalesDiscountReasonID+',%' or
       ','+@Codes+',' like '%,'+CouponID+',%' or
       ','+@Codes+',' like '%,'+CampaignID+',%' or
       ','+@Codes+',' like '%,'+PromotionCodeID+',%'
      )

额外的逗号用于避免混淆,比如10和100。

如果您正在构建SQL,那么更好的做法是:

代码语言:javascript
复制
where SalesDiscountReasonID in (''' + replace(@Codes, ',', ''',''') + ''') or
      CouponID in (''' + replace(@Codes, ',', ''',''') + ''') or
      CampaignID in (''' + replace(@Codes, ',', ''',''') + ''') or
      PromotionCodeID in (''' + replace(@Codes, ',', ''',''') + ''')'

其中一个原因是in可以利用索引,因此可以执行得更好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24366572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档