rakeshsekar2025
New Contributor III
WITH version_comparison AS (
    SELECT 
        v.PriceProfileId,
        v.Name,
        i.ItemNumber,
        i.ServiceType,
        i.WorkType,
        i.RevenueStream,
        i.Multiplier,
        i.SGSItemDescription,
        i.ClientDescription,
        i.ItemAlias,
        i.ModificationStatus,
        c.Cost,
        c.Code,
        v.VersionOrder
    FROM prod_pricematrix.bronze.price_profile_version v
    LEFT JOIN prod_pricematrix.bronze.price_profile_item i ON v.Id = i.VersionId 
    LEFT JOIN prod_pricematrix.bronze.price_profile_item_currency c ON i.Id = c.PriceProfileItemId 
    WHERE v.PriceProfileId = :ppi AND v.VersionOrder IN (:iv, :cv)
)

SELECT
    COALESCE(v1.PriceProfileId, v2.PriceProfileId) AS PriceProfileId,
    COALESCE(v1.Name, v2.Name) AS Name,
    COALESCE(v1.ItemNumber, v2.ItemNumber) AS ItemNumber,
    v1.ServiceType AS ServiceType_v1,
    v1.WorkType AS WorkType_v1,
    v1.RevenueStream AS RevenueStream_v1,
    v1.Multiplier AS Multiplier_v1,
    v1.SGSItemDescription AS SGSItemDescription_v1,
    v1.ClientDescription AS ClientDescription_v1,
    v1.ItemAlias AS ItemAlias_v1,

    v2.ServiceType AS ServiceType_v2,
    v2.WorkType AS WorkType_v2,
    v2.RevenueStream AS RevenueStream_v2,
    v2.Multiplier AS Multiplier_v2,
    v2.SGSItemDescription AS SGSItemDescription_v2,
    v2.ClientDescription AS ClientDescription_v2,
    v2.ItemAlias AS ItemAlias_v2,
    
    v1.ModificationStatus AS ModificationStatus_v1,
    v2.ModificationStatus AS ModificationStatus_v2,
    COALESCE(v1.Code, v2.Code) AS CurrencyType,
    v1.Cost AS Cost_v1,
    v2.Cost AS Cost_v2,
    CASE 
        WHEN Cost_v1 IS NULL OR Cost_v2 IS NULL THEN 'N/A'
        WHEN Cost_v1 = 0 AND Cost_v2 = 0 THEN '0.00%'
        WHEN Cost_v1 = Cost_v2 THEN '0.00%'
        WHEN Cost_v1 = 0 THEN '100.00%'
        WHEN Cost_v2 = 0 THEN '-100.00%'
        ELSE CONCAT(
            CAST(ROUND((Cost_v2 - Cost_v1) / Cost_v1 * 100, 2) AS DECIMAL(10,2)),
            '%'
            )
    END AS CostChangePercentage,
    CASE 
        WHEN v1.Cost IS NULL OR v2.Cost IS NULL THEN 'N/A'
        WHEN v1.Cost = v2.Cost THEN 'No Change'
        WHEN v2.Cost > v1.Cost THEN 'Increased'
        WHEN v2.Cost < v1.Cost THEN 'Decreased'
    END AS CostChangeStatus
FROM (
    SELECT * FROM version_comparison WHERE VersionOrder = :iv
) v1
FULL OUTER JOIN (
    SELECT * FROM version_comparison WHERE VersionOrder = :cv
) v2 ON v1.ItemNumber = v2.ItemNumber
ORDER BY COALESCE(v1.ItemNumber, v2.ItemNumber);