-2

您好,我目前正在根据每周销售额编写一份报告,我已经正确地达到了我目前的数字,并且可以与我的 @FirstdayofWeek 和 @LastDayOfWeek 参数一起使用,我现在正试图为我的上一周复制它,正如你所知道的前一周是-7 天后

当我在 where 子句中运行它时

  and FirstDayOfWeek = dateadd(day,-7,'2014/06/02')
  and LastDayOfWeek = dateadd(day,-7,'2014/06/08')

它有效,我得到这个数字的预数量和它的正确性 在此处输入图像描述

但是当我为我的参数执行此操作时

AND dateadd(day,-7,w.FirstDayOfWeek) in (
              SELECT Item
              FROM DataWarehouse.dbo.ufnSplit(@FirstDayOfWeek, ',')
              )
        AND dateadd(day,-7,w.LastDayOfWeek) in (
              SELECT Item
              FROM DataWarehouse.dbo.ufnSplit(@LastDayOfWeek, ',')
              )

我在任何地方都没有得到列标题。有任何想法吗?

这是我用来执行存储过程的代码:

exec WeeklySalesAndUSW @BD=N'798664',
@CGNo=N'47',
@SCGNo=N'01,02,03,04,05,06,07,08',
@ProductClass=N'1',
@‌​ProductCode=N'1108',
@Region=N'772',
@FirstDayOfWeek = '2014/06/02',
@LastDayOfWeek = '2014/06/08' 

为什么我的参数没有通过?如果我硬编码日期,为什么它会起作用,但是当我使它成为动态时,它什么也得不到?

4

1 回答 1

0

它可能不起作用,因为您颠倒了方程式。

在有效的代码中,您正在执行以下操作:

and FirstDayOfWeek = dateadd(day,-7,'2014/06/02')
and LastDayOfWeek = dateadd(day,-7,'2014/06/08')

请注意,您是从硬编码的“参数”中减去 7 天,而不是从表中的列中减去。

现在您正在尝试使用动态参数值,您正在做相反的事情:

AND dateadd(day,-7,w.FirstDayOfWeek) in (
              SELECT Item
              FROM DataWarehouse.dbo.ufnSplit(@FirstDayOfWeek, ',')
              )
        AND dateadd(day,-7,w.LastDayOfWeek) in (
              SELECT Item
              FROM DataWarehouse.dbo.ufnSplit(@LastDayOfWeek, ',')
              )

您从表格列中减去 7 天,而不是参数值。

您可以通过简单地删除两个 7 之前的减号 (-) 来纠正此问题。这是因为在等式左侧加 7 在数学上与从右侧减去 7 相同。

于 2015-08-25T13:03:06.003 回答