You may need to adjust the KM parameters based on how the client defines their parameters.
SELECT VehicleNumber,
Registration,
TranspNo,
TranspDescrip,
VehDormantFlag,
CASE WHEN VehicleCategory = 'H' THEN "Horse" WHEN VehicleCategory = 'L' THEN "Leader" WHEN VehicleCategory = 'F' THEN "Follower" WHEN VehicleCategory = 'R' THEN "Rigid"
ELSE NULL END AS Vehicle_Category,
SpeedoCurrent,
LicenceDate,
COFDate,
PDPDate,
DieselTargetConsumption,
MinServiceInterval,
MinServiceDue,
ServiceDueFlag,
ServiceDueInKms,
KmBeforeService,
Datediff(LicenceDate,NOW()) AS Licence_ExpiryDays,
CASE WHEN Licence_ExpiryDays < 0 THEN "1. Expired" WHEN Licence_ExpiryDays
BETWEEN 0 AND 90 THEN "2. Expiry Upcoming"
ELSE "3. Valid" END AS License_ExpiryFlag,
CASE WHEN LicenceDate < date(now()) THEN LicenceDate
ELSE ''end AS Licence_Expired,
CASE WHEN LicenceDate < date_add(date(now()),interval 7 day) AND LicenceDate >= date(now()) THEN LicenceDate
ELSE '' END AS Licence_7_Days,
CASE WHEN LicenceDate < date_add(date(now()),interval 15 day) AND LicenceDate >= date_add(date(now()),interval 7 day) THEN LicenceDate
ELSE '' END AS Licence_7_To_15_Days,
CASE WHEN LicenceDate < date_add(date(now()),interval 30 day) AND LicenceDate >= date_add(date(now()),interval 15 day) THEN LicenceDate
ELSE '' END AS Licence_15_To_30_Days,
CASE WHEN LicenceDate < date_add(date(now()),interval 60 day) AND LicenceDate >= date_add(date(now()),interval 30 day) THEN LicenceDate
ELSE '' END AS Licence_30_To_60_Days,
CASE WHEN LicenceDate < date_add(date(now()),interval 90 day) AND LicenceDate >= date_add(date(now()),interval 60 day) THEN LicenceDate
ELSE '' END AS Licence_60_To_90_Days,
CASE WHEN LicenceDate >= date_add(date(now()),interval 90 day) THEN LicenceDate
ELSE '' END AS Licence_90_Plus_Days,
CASE WHEN LicenceDate < date(now()) THEN 1
ELSE 0 END AS Licence_Expired_Count,
CASE WHEN LicenceDate < date_add(date(now()),interval 7 day) AND LicenceDate >= date(now()) THEN 1
ELSE 0 END AS Licence_7_Days_Count,
CASE WHEN LicenceDate < date_add(date(now()),interval 15 day) AND LicenceDate >= date_add(date(now()),interval 7 day) THEN 1
ELSE 0 END AS Licence_7_To_15_Days_Count,
CASE WHEN LicenceDate < date_add(date(now()),interval 30 day) AND LicenceDate >= date_add(date(now()),interval 15 day) THEN 1
ELSE 0 END AS Licence_15_To_30_Days_Count,
CASE WHEN LicenceDate < date_add(date(now()),interval 60 day) AND LicenceDate >= date_add(date(now()),interval 30 day) THEN 1
ELSE 0 END AS Licence_30_To_60_Days_Count,
CASE WHEN LicenceDate < date_add(date(now()),interval 90 day) AND LicenceDate >= date_add(date(now()),interval 60 day) THEN 1
ELSE 0 END AS Licence_60_To_90_Days_Count,
CASE WHEN LicenceDate >= date_add(date(now()),interval 90 day) THEN 1
ELSE 0 END AS Licence_90_Plus_Days_Count,
Datediff(COFDate,NOW()) AS COF_ExpiryDays,
CASE WHEN COF_ExpiryDays < 0 THEN "1. Expired" WHEN COF_ExpiryDays
BETWEEN 0 AND 90 THEN "2. Expiry Upcoming"
ELSE "3. Valid" END AS COF_ExpiryFlag,
CASE WHEN COFDate < date(now()) THEN COFDate
ELSE ''end AS COF_Expired,
CASE WHEN COFDate < date_add(date(now()),interval 7 day) AND COFDate >= date(now()) THEN COFDate
ELSE '' END AS COF_7_Days,
CASE WHEN COFDate < date_add(date(now()),interval 15 day) AND COFDate >= date_add(date(now()),interval 7 day) THEN COFDate
ELSE '' END AS COF_7_To_15_Days,
CASE WHEN COFDate < date_add(date(now()),interval 30 day) AND COFDate >= date_add(date(now()),interval 15 day) THEN COFDate
ELSE '' END AS COF_15_To_30_Days,
CASE WHEN COFDate < date_add(date(now()),interval 60 day) AND COFDate >= date_add(date(now()),interval 30 day) THEN COFDate
ELSE '' END AS COF_30_To_60_Days,
CASE WHEN COFDate < date_add(date(now()),interval 90 day) AND COFDate >= date_add(date(now()),interval 60 day) THEN COFDate
ELSE '' END AS COF_60_To_90_Days,
CASE WHEN COFDate >= date_add(date(now()),interval 90 day) THEN COFDate
ELSE '' END AS COF_90_Plus_Days,
CASE WHEN COFDate < date(now()) THEN 1
ELSE 0 END AS COF_Expired_Count,
CASE WHEN COFDate < date_add(date(now()),interval 7 day) AND COFDate >= date(now()) THEN 1
ELSE 0 END AS COF_7_Days_Count,
CASE WHEN COFDate < date_add(date(now()),interval 15 day) AND COFDate >= date_add(date(now()),interval 7 day) THEN 1
ELSE 0 END AS COF_7_To_15_Days_Count,
CASE WHEN COFDate < date_add(date(now()),interval 30 day) AND COFDate >= date_add(date(now()),interval 15 day) THEN 1
ELSE 0 END AS COF_15_To_30_Days_Count,
CASE WHEN COFDate < date_add(date(now()),interval 60 day) AND COFDate >= date_add(date(now()),interval 30 day) THEN 1
ELSE 0 END AS COF_30_To_60_Days_Count,
CASE WHEN COFDate < date_add(date(now()),interval 90 day) AND COFDate >= date_add(date(now()),interval 60 day) THEN 1
ELSE 0 END AS COF_60_To_90_Days_Count,
CASE WHEN COFDate >= date_add(date(now()),interval 90 day) THEN 1
ELSE 0 END AS COF_90_Plus_Days_Count,
CASE WHEN MinServiceDue - SpeedoCurrent <= 0 THEN MinServiceDue - SpeedoCurrent END AS 'Overdue',
CASE WHEN MinServiceDue - SpeedoCurrent > 0 AND MinServiceDue - SpeedoCurrent <= 500 THEN MinServiceDue - SpeedoCurrent END AS '0-500km',
CASE WHEN MinServiceDue - SpeedoCurrent > 500 AND MinServiceDue - SpeedoCurrent <= 1000 THEN MinServiceDue - SpeedoCurrent END AS '501-1000km',
CASE WHEN MinServiceDue - SpeedoCurrent > 1000 AND MinServiceDue - SpeedoCurrent <= 1500 THEN MinServiceDue - SpeedoCurrent END AS '1001-1500km',
CASE WHEN MinServiceDue - SpeedoCurrent > 1500 AND MinServiceDue - SpeedoCurrent <= 2000 THEN MinServiceDue - SpeedoCurrent END AS '1501-2000km',
CASE WHEN MinServiceDue - SpeedoCurrent > 2000 AND MinServiceDue - SpeedoCurrent <= 2500 THEN MinServiceDue - SpeedoCurrent END AS '2001-2500km',
CASE WHEN MinServiceDue - SpeedoCurrent > 2500 AND MinServiceDue - SpeedoCurrent <= 3000 THEN MinServiceDue - SpeedoCurrent END AS '2501-3000km',
CASE WHEN MinServiceDue - SpeedoCurrent > 3000 THEN MinServiceDue - SpeedoCurrent END AS '3000 Plus km',
CASE WHEN ServiceDueInKms
BETWEEN 0 AND 3000 THEN "2. Upcoming Service" WHEN MinServiceDue <= SpeedoCurrent THEN "1. Due for Service"
ELSE "3. No Service Needed" END AS ServiceStatus,
t.TrCrName AS TransporterName
FROM vwa_vehiclemaster v
LEFT JOIN vwa_transito t ON v.TranspNo = t.TrCrNumber
WHERE VehDormantFlag = 'N'