-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 に答える