我无法解决以下问题:我必须以足够通用的方式报告促销活动的总销售额,以便通过订阅处理例行用户请求。 (甚至让用户按需获取数据)
我正在尝试为SSRS报告编写一个查询,该报告将接受来自允许多个值的文本参数的输入。示例('Code1,Code2,Code3')...... 然后搜索下面示例表中的所有四个Sale“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
我无法改变数据仓库中数据的结构,我不能指望经常要求此报告的用户跟踪优惠券,Campaign,SalesDiscount,PromoCode用于实施销售的促销类型他们没有设置销售或进行订单的数据输入。
答案 0 :(得分:0)
我认为你可以用like
:
where (','+@Codes+',' like '%,'+SalesDiscountReasonID+',%' or
','+@Codes+',' like '%,'+CouponID+',%' or
','+@Codes+',' like '%,'+CampaignID+',%' or
','+@Codes+',' like '%,'+PromotionCodeID+',%'
)
额外的逗号用于避免在10
和100
之间产生混淆。
如果您正在构建SQL,那么做起来要好得多:
where SalesDiscountReasonID in (''' + replace(@Codes, ',', ''',''') + ''') or
CouponID in (''' + replace(@Codes, ',', ''',''') + ''') or
CampaignID in (''' + replace(@Codes, ',', ''',''') + ''') or
PromotionCodeID in (''' + replace(@Codes, ',', ''',''') + ''')'
一个原因是in
可以使用索引,因此可以表现得更好。