I have a table called TblVesselEngineSummary, which has a field called EngineConfiguration containing these values
- 'Single' - Single Engine
- 'Twin' - Double Engine - two records needed
- 'Triple' - Triple Engine - three records needed
In order to achieve it, I have doing union all to same table 3 times. it is impacting the performance, is there a better way to implement this?
I have EngineId as primary key, in order to make each entry unique, I adding 90000000 or 50000000.
SELECT * FROM (
Select
EngineSummaryID AS EngineId, VesselID_PK AS EngineBoatId,
'Port' AS EngineLocation, EngineHoursPort AS 'Hours',
strEngineManufacturer AS 'EngineMake', strEngineModel AS 'EngineModel',
strEngineType AS 'EngineType', EngineYear,
EngineHP AS 'PowerHP', SerialForPort AS 'SerialNumber',
'1' AS 'Sort', UpdatedOn
from TblVesselEngineSummary
WHERE IsActiveVesselSummary = 'Y'
UNION ALL
--'Twin','Triple'
Select
EngineSummaryID + 90000000 AS EngineId, VesselID_PK AS EngineBoatId,
'Starboard' AS EngineLocation, EngineHoursStarboard AS 'Hours',
strEngineManufacturer AS 'EngineMake', strEngineModel AS 'EngineModel',
strEngineType AS 'EngineType', EngineYear,
EngineHP AS 'PowerHP', SerialForPort AS 'SerialNumber',
'2' AS 'Sort', UpdatedOn
from TblVesselEngineSummary
WHERE IsActiveVesselSummary = 'Y' AND EngineConfiguration IN ('Twin','Triple')
UNION ALL
--'Triple'
Select
EngineSummaryID + 50000000 AS EngineId, VesselID_PK AS EngineBoatId,
'Starboard' AS EngineLocation, EngineHoursStarboard AS 'Hours',
strEngineManufacturer AS 'EngineMake', strEngineModel AS 'EngineModel',
strEngineType AS 'EngineType', EngineYear,
EngineHP AS 'PowerHP', SerialForPort AS 'SerialNumber',
'3' AS 'Sort', UpdatedOn
from TblVesselEngineSummary
WHERE IsActiveVesselSummary = 'Y' AND EngineConfiguration = 'Triple'
) allEngines ORDER BY EngineBoatId, Sort
EngineConfiguration EngineSummaryID VesselID_PK EngineHoursStarboard strEngineManufacturer strEngineModel strEngineType EngineYear EngineHP SerialForPort UpdatedOn
Twin 27092 484405 2825 YANMAR JH57 InBoard 2020 57 5/14/24 3:35 PM
Twin 27090 441067 3351 Yanmar 4JH4-E InBoard 2006 54 5/10/24 12:52 PM
Single 27080 431834 MerCruiser 6.2L InBoard 2008 300 5/7/24 2:43 PM
Twin 27078 495706 1466 Volvo Penta D2-30 InBoard 2019 30 5/7/24 12:58 PM
Triple 27052 496093 125 (Center) 127 YAMAHA 350TXR 350 TUR Outboard 2008 350 4/10/24 4:21 PM
caseexpression for the columns that vary: Id and engine location, I think.