1

这个查询有效,但是我需要它来做一些我不知道该怎么做的额外事情。如果 LEFT JOIN 部分没有返回记录,我需要查询将 0 放入“activityTempBookings”字段。这是为了覆盖较旧的数据,其中没有具有未来“tempReserveDate”的活动,即使过去可能是这样。

    UPDATE P
    SET activityTempBookings = t.bookingTempTotal
    FROM [LeisureActivities].[dbo].[activities] AS P 
    LEFT JOIN (
        SELECT tempActivityID, SUM(tempPlaces) bookingTempTotal 
            FROM [LeisureActivities].[dbo].[tempbookings] 
            WHERE tempReserveDate > GETDATE () 
            GROUP BY tempActivityID
    )t
    ON t.tempActivityID = p.activityID

非常感谢任何帮助 - 请不要认为我很粗鲁,但我可能要到星期一才会回复。

谢谢。

4

2 回答 2

3

使用COALESCE它基本上返回其参数中的第一个非空表达式。

UPDATE P
SET    activityTempBookings = COALESCE(t.bookingTempTotal, 0)
FROM   [LeisureActivities].[dbo].[activities] AS P 
       LEFT JOIN 
       (
           SELECT tempActivityID, 
                  SUM(tempPlaces) bookingTempTotal 
           FROM   [LeisureActivities].[dbo].[tempbookings] 
           WHERE  tempReserveDate > GETDATE () 
           GROUP  BY tempActivityID
       ) t ON t.tempActivityID = p.activityID
于 2013-03-22T17:32:47.493 回答
0

使用 ISNULL


UPDATE P
    SET activityTempBookings = ISNULL(t.bookingTempTotal,0)
    FROM [LeisureActivities].[dbo].[activities] AS P 
    LEFT JOIN (
        SELECT tempActivityID, SUM(tempPlaces) bookingTempTotal 
            FROM [LeisureActivities].[dbo].[tempbookings] 
            WHERE tempReserveDate > GETDATE () 
            GROUP BY tempActivityID
    )t
    ON t.tempActivityID = p.activityID
于 2013-03-22T17:36:34.350 回答