Использование описаний случаев с Not Exists как часть предложения Where - PullRequest
0 голосов
/ 12 апреля 2019

Я рассчитываю амортизацию транспортных средств и мне нужно получить значения предыдущего месяца, если они существуют.

Я написал оператор case в предложении where, чтобы проверить, существует ли значение.Если это так, то я хочу вычесть один месяц и использовать это значение для получения данных за предыдущие месяцы.Если он не существует, я хочу данные текущего месяца.Но это будет делать только один или другой.Я напутал, где существует?

SELECT b.*
--this is month we want to compare (For example month 45)
FROM #changes AS a 
--this has all the months  (for example month 1-50)
INNER JOIN work.dbo.DepreciationSchedule AS b 
    ON b.VehicleID = a.VehicleID
--If the previous months value exists in table b (Ex month 44), then take take that months value otherwise take the current value of table a (Ex month 45)
WHERE b.Month = CASE 
                    WHEN EXISTS(SELECT * 
                                 FROM #changes AS innerA 
                                 WHERE innerA.month = a.month - 1) 
                    THEN a.Month - 1  
                    ELSE a.Month 
                END

1 Ответ

0 голосов
/ 12 апреля 2019

Я понял это.Было две вещи, которые мне пришлось изменить.

  1. Добавьте идентификатор транспортного средства в текущий подзапрос, чтобы убедиться, что я хотел, чтобы эти транспортные средства были указаны только во временной таблице
  2. Измените таблицу подзапроса на график амортизации

    Выберите b. * - это месяц, который мы хотим сравнить (например, месяц 45). Из #changes As - у него есть все месяцы (например, месяц 1-50). Inner Join work.dbo.DepreciationSchedule Asb На b.VehicleID = a.VehicleID - Если значение предыдущих месяцев существует в таблице b (например, месяц 44), то примите значение взятия этого месяца, в противном случае возьмите текущее значение таблицы a (пример месяца 45), где b.Month =Случай, когда существует (выберите * из work.dbo.DepreciationSchedule As innerA, где innerA.month = a.month - 1 и innerA.VehicleID = a.vehicleID) Затем a.Month -1 остальное a.Month end

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...