我在以下问题上遇到了麻烦,必须以一种足够通用的方式报告促销活动的总销售额,以便我可以通过订阅来处理常规的用户请求。(甚至让用户按需获取数据)
我正在尝试为SSRS报告编写一个查询,该查询将接受来自允许多脉冲值的文本参数的输入。示例(‘Code1,Code2,Code3’)…然后在下面的示例表中搜索所有四个销售“ID”字段-返回每个DocumentNo、LineNo_组合,其中任何一个提供的代码出现在任何一个ID字段中。这四个字段不能为空,但可以为空字符串。一个订单行可以应用多个代码,但每个字段只能应用一个代码。每个DocumentNo,LineNo_组合应该只在输出中出现一次,这样我就可以对数量求和并获得正确的总数。
[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来实施销售,因为他们不设置销售或进行订单的数据输入。
发布于 2014-06-23 21:03:16
我认为你可以用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可以利用索引,因此可以执行得更好。
https://stackoverflow.com/questions/24366572
复制相似问题