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 ?
- screenshot-20220126110112.png (13 KB) - ściągnięć: 11
- screenshot-20220126110114.png (13 KB) - ściągnięć: 9
- screenshot-20220126110502.png (13 KB) - ściągnięć: 9
- screenshot-20220126110905.png (40 KB) - ściągnięć: 10
- screenshot-20220126111117.png (20 KB) - ściągnięć: 9
- screenshot-20220126115820.png (17 KB) - ściągnięć: 9
- screenshot-20220126115834.png (12 KB) - ściągnięć: 10
- screenshot-20220126115858.png (12 KB) - ściągnięć: 10