PlotDirector/PlotLine/Sql/076_FloorPlanFloorLevels.sql

32 lines
1.1 KiB
PL/PgSQL

-- Reinterpret the existing FloorPlanFloors.SortOrder integer as user-facing floor Level.
-- This preserves current relative order for legacy 10-step SortOrder data without adding schema.
IF OBJECT_ID(N'dbo.FloorPlanFloors', N'U') IS NOT NULL
BEGIN
;WITH LegacyPlans AS
(
SELECT FloorPlanID
FROM dbo.FloorPlanFloors
GROUP BY FloorPlanID
HAVING COUNT(*) > 0
AND MIN(SortOrder) >= 10
AND SUM(CASE WHEN SortOrder % 10 = 0 THEN 0 ELSE 1 END) = 0
),
OrderedFloors AS
(
SELECT
fpf.FloorPlanFloorID,
ROW_NUMBER() OVER (PARTITION BY fpf.FloorPlanID ORDER BY fpf.SortOrder, fpf.Name, fpf.FloorPlanFloorID) - 1 AS FloorLevel
FROM dbo.FloorPlanFloors fpf
INNER JOIN LegacyPlans lp ON lp.FloorPlanID = fpf.FloorPlanID
)
UPDATE fpf
SET
SortOrder = ordered.FloorLevel,
ModifiedDate = SYSUTCDATETIME()
FROM dbo.FloorPlanFloors fpf
INNER JOIN OrderedFloors ordered ON ordered.FloorPlanFloorID = fpf.FloorPlanFloorID
WHERE fpf.SortOrder <> ordered.FloorLevel;
END;
GO