-1

日付に 6 日を足すと期待通りの結果が得られますが、同じ日付に 7 日を足すと同じ日付になります。

私が言いたいのはこれです。ユーザーが@BegDate パラメーターの値として「 12/27/2015 」を入力した場合、この宣言は次のようになります。

DECLARE 
@Week1End datetime = DATEADD(Day, 6, @BegDate),
@Week2Begin datetime = DATEADD(Day, 7, @BegDate);

...返された結果セットからわかるように、@Week1End と @Week2Begin の両方が同じ日付 (2016-01-02) になります。

ここに画像の説明を入力

これは TSQL です。

CREATE PROCEDURE [dbo].[variancePriceByProductWithPriceChangePercentage]
    @Unit varchar(25),
    @BegDate datetime,
    @EndDate datetime
AS

DECLARE 
@Week1End datetime = DATEADD(Day, 6, @BegDate),
@Week2Begin datetime = DATEADD(Day, 7, @BegDate);

Select Ind.Description,
    @BegDate  BegDate,
    @Week1End Week1End,
    @Week1End Week2Begin,
    @EndDate EndDate,
    SUM(CASE WHEN Ind.InvoiceDate BETWEEN @BegDate AND @Week1End THEN Ind.QtyShipped ELSE 0 END) 
Week1Usage,
    SUM(CASE WHEN Ind.InvoiceDate BETWEEN @Week2Begin AND @EndDate THEN Ind.QtyShipped ELSE 0 END) 
Week2Usage,
    SUM(CASE WHEN Ind.InvoiceDate BETWEEN @BegDate AND @Week1End THEN Ind.Price ELSE 0 END) 
Week1Price,
    SUM(CASE WHEN Ind.InvoiceDate BETWEEN @Week2Begin AND @EndDate THEN Ind.Price ELSE 0 END) -
   SUM(CASE WHEN Ind.InvoiceDate BETWEEN @BegDate AND @Week1End THEN Ind.QtyShipped ELSE 0 END) 
UsageVariance,
    SUM(CASE WHEN Ind.InvoiceDate BETWEEN @Week2Begin AND @EndDate THEN Ind.QtyShipped ELSE 0 END) 
-
    SUM(CASE WHEN Ind.InvoiceDate BETWEEN @BegDate AND @Week1End THEN Ind.Price ELSE 0 END) 
PriceVariance,
    (SUM(CASE WHEN Ind.InvoiceDate BETWEEN @Week2Begin AND @EndDate THEN Ind.QtyShipped ELSE 0 
END)  -
    SUM(CASE WHEN Ind.InvoiceDate BETWEEN @BegDate AND @Week1End THEN Ind.Price ELSE 0 END) )
    / 
NULLIF(SUM(CASE WHEN Ind.InvoiceDate BETWEEN @BegDate AND @Week1End THEN Ind.Price ELSE 0 END),0) 
PercentageOfPriceVariance
    From    InvoiceDetail Ind
    Where   Ind.Unit = @Unit
    AND Ind.InvoiceDate BETWEEN @BegDate AND @EndDate
    Group By Ind.Description

では、なぜ@BegDate + 6は@BegDate + 7と同じに等しいのでしょうか。

4

2 に答える 2

2
@Week1End Week1End,
@Week1End Week2Begin,

このコードをもう一度見てください...

于 2016-01-13T21:51:14.770 に答える
1

本気ですか:

DECLARE @BegDate datetime = GETDATE()

SELECT @BegDate, DATEADD(Day, 6, @BegDate), DATEADD(Day, 7, @BegDate);

結果:

ここに画像の説明を入力

あなたの問題はここにあると思います:

@Week1End Week1End,
@Week1End Week2Begin, ---<<<<<--- 

そのはず :

@Week1End Week1End,
@Week2BeginWeek2Begin, ---<<<<<--- 
于 2016-01-13T21:49:05.447 に答える