2013-03-22 68 views
1

此查询工作,但我需要它做额外的事情,我不知道该怎么做。如果在LEFT JOIN部分中没有返回记录,我需要查询将“0”放入“activityTempBookings”字段。这样,即使在过去可能已经存在,它也会覆盖没有未来“tempReserveDate”活动的旧数据。SQL更新左连接 - 但是,如果没有记录将字段0123'

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 

任何帮助非常感谢 - 请不要以为我粗鲁,但我可能不会回应,直到星期一。

谢谢。

回答

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 
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