Cześć,
Posiadam kilka tabel w MS SQL które tworzą kalendarz, łącząc 3 tabele jestem wstanie wyświetlić czas dla każdej zmiany jaki jest przypisany w danym dniu dla wybranej przez użytkownika maszyny.
SELECT d.*,AvailableTime
FROM(
SELECT s.*, CalendarShiftId
FROM(
SELECT
Date, CalendarDayId, VehicleId ,CompanyId ,DepartmentId ,IsDeleted
FROM [TEST].[dbo].[Calendar]
WHERE VehicleId IN('2','5')
AND Date BETWEEN '2021-07-01 00:00:00.000' AND '2021-07-01 23:00:00.000'
AND IsDeleted =0
) s
JOIN [TEST].[dbo].[CalendarDayShift] ON CalendarDayShift.CalendarDayId = S.CalendarDayId
)d
jOIN [TEST].[dbo].[CalendarShift] ON CalendarShift.Id = d.CalendarShiftId
i otrzymuje wynik :
Tak wygląda cały algorytm:
Mam problem iż w tabeli Calendar numer urządzenia może być NULL i wtedy program powinien przejść do tabeli Vahicle i sprawdzić jaki numer DepartmentId odpowiada VehiclId, analogicznie jest gdy DepartmentId jest Null powinien sprawdzić CompanyId i dopiero wtedy odczytać CalendarDayId dla wybranego na samym początku VehicleId i przejść dalej( co już zrobiłem).
Lecz zawsze z priorytetem VehiclId później DepartmentId a na samym końcu jak reszta jest Null dopiero CompanyId. Na zasadzie gdy VehicleId nie jest NULL to reszty już nie bierzemy pod uwagę.
Próbując to zrobić przy użyciu:
CASE WHEN VehicleId IS NULL THEN [Vehicle].VehicleId ELSE Calendar.VehicleId END
wyrzuca błąd : The multi-part identifier "Vehicle.VehicleId" could not be bound.
Ktoś mógł by podpowiedzieć jak to rozwiązac taki problem ?