Tsql 从PitchValues表中提取正确的结果

Tsql 从PitchValues表中提取正确的结果,tsql,Tsql,我有点沮丧,想知道你是否能帮助我: 我有一个俯仰值表,其中包含以下列PitchValues_Skey、PitchType_Skey(这是外键)、开始日期、结束日期和最终值: 例如: 1 7 01/01/2010 31/12/2010 £15 2 7 01/01/2011 31/12/2011 £20 我所要做的就是更新我的预订表,每个预订的数量,所以我把下面的代码放在一起,当我只有2010年的数据时,它运行良好,但我知道有2011年和2012年的数据,我

我有点沮丧,想知道你是否能帮助我:

我有一个俯仰值表,其中包含以下列PitchValues_Skey、PitchType_Skey(这是外键)、开始日期、结束日期和最终值:

例如:

1    7   01/01/2010    31/12/2010   £15
2    7   01/01/2011    31/12/2011   £20
我所要做的就是更新我的预订表,每个预订的数量,所以我把下面的代码放在一起,当我只有2010年的数据时,它运行良好,但我知道有2011年和2012年的数据,我想更新它,但它只会更新为2010年的价格

SELECT        Bookings.Booking_Skey, DATEDIFF(day, Bookings.ArrivalDate, Bookings.DepartureDate) * PitchValues.Value AS BookingValue, 
                         PitchValues.PitchType_Skey
FROM            Bookings INNER JOIN
                         PitchValues ON Bookings.PitchType_Skey = PitchValues.PitchType_Skey
WHERE        (Bookings.Booking_Skey = 1)
因此,当我运行上面的查询时,我希望看到一行数据,但我看到的是4行(见下文)

我希望:

Booking_Skey    BookingValue    PitchType_Skey
      1               420                     4
但我明白了

Booking_Skey    BookingValue    PitchType_Skey
     1                 420                  4
     1                 453.6                4
     1                 476.7                4
     1                 476.7                4

现在一切都好了,谢谢你的帮助

SELECT  Bookings.Booking_Skey, DATEDIFF(DAY, Bookings.ArrivalDate, Bookings.DepartureDate) * PitchValues.Value AS BookingValue, PitchValues.PitchType_Skey
FROM    Bookings
INNER JOIN PitchValues ON Bookings.PitchType_Skey = PitchValues.PitchType_Skey
    AND Bookings.ArrivalDate BETWEEN PitchValues.StartDate AND PitchValues.EndDate
WHERE (Bookings.Booking_Skey = 1)

如果只检查Bookings.Booking_Skey=1,那么所有给定的元组都是匹配的。因此,输出是正确的!但是预订应该只有一行数据,因为此预订的到达日期是2010年,而不是2011年、2012年等。但是您在哪里检查日期?或者你是说表本身应该只有那个值?这是我的问题,我不知道。我的PitchValue表有一个开始日期和结束日期,即某个特定值的有效日期,例如PitchType 1=9,但仅在2010年1月1日至2010年12月31日之间,但在2011年1月1日至2011年12月31日之间。相同PitchType的值为10.20英镑,每年有不同的价格。