【问题标题】:Tsql: Search multiple fields per row for a given set of string valuesTsql:每行搜索多个字段以获取给定的字符串值集
【发布时间】:2014-06-23 21:18:18
【问题描述】:

我无法解决以下问题,因为我必须以一种足够通用的方式报告促销活动的总销售额,以便我可以通过订阅处理日常用户请求。 (甚至让用户按需获取数据)

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

[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

我无法更改数据仓库中的数据结构,并且我不能指望那些经常要求此报告的用户跟踪使用何种类型的促销 Coupon、Campaign、SalesDiscount、PromoCode 来实施销售他们不设置销售或进行订单数据输入。

【问题讨论】:

    标签: sql-server-2008 tsql ssrs-2008


    【解决方案1】:

    我想你可以用like做你想做的事:

    where (','+@Codes+',' like '%,'+SalesDiscountReasonID+',%' or
           ','+@Codes+',' like '%,'+CouponID+',%' or
           ','+@Codes+',' like '%,'+CampaignID+',%' or
           ','+@Codes+',' like '%,'+PromotionCodeID+',%'
          )
    

    额外的逗号用于避免混淆,例如 10100

    如果您正在构建 SQL,那么这样做会好得多:

    where SalesDiscountReasonID in (''' + replace(@Codes, ',', ''',''') + ''') or
          CouponID in (''' + replace(@Codes, ',', ''',''') + ''') or
          CampaignID in (''' + replace(@Codes, ',', ''',''') + ''') or
          PromotionCodeID in (''' + replace(@Codes, ',', ''',''') + ''')'
    

    一个原因是in 可以利用索引,因此性能更好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多