2013-03-22 70 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