Comprendre le Pivotement en SQL avec le mot clé PIVOT


Qu’est-ce que le Pivotement ?

Exemple de Table de Ventes

ProductIDMonthSalesAmount
1January100
1February150
1March200
2January80
2February120
2March160

SQL Standard (sans PIVOT)

SELECT
    ProductID,
    SUM(CASE WHEN Month = 'January' THEN SalesAmount ELSE 0 END) AS January,
    SUM(CASE WHEN Month = 'February' THEN SalesAmount ELSE 0 END) AS February,
    SUM(CASE WHEN Month = 'March' THEN SalesAmount ELSE 0 END) AS March
FROM
    Sales
GROUP BY
    ProductID;

Utilisation de PIVOT en SQL Server

SELECT
    ProductID,
    January,
    February,
    March
FROM
    (SELECT ProductID, Month, SalesAmount FROM Sales) AS SourceTable
PIVOT
(
    SUM(SalesAmount)
    FOR Month IN (January, February, March)
) AS PivotTable;

Utilisation de PIVOT en Oracle

SELECT *
FROM
    (SELECT ProductID, Month, SalesAmount FROM Sales)
PIVOT
(
    SUM(SalesAmount)
    FOR Month IN ('January' AS January, 'February' AS February, 'March' AS March)
);

Utilisation de PIVOT en PostgreSQL

CREATE EXTENSION IF NOT EXISTS tablefunc;

SELECT *
FROM crosstab(
  'SELECT ProductID, Month, SalesAmount FROM Sales ORDER BY 1,2',
  'VALUES (''January''), (''February''), (''March'')'
) AS ct (ProductID INT, January INT, February INT, March INT);

Pourquoi Utiliser SUM(SalesAmount) ?

Exemple Complet

ProductIDMonthSalesAmount
1January100
1January50
1February150
1February100
1March200
2January80
2January20
2February120
2March160
ProductIDMonthTotalSalesAmount
1January150
1February250
1March200
2January100
2February120
2March160
ProductIDJanuaryFebruaryMarch
1150250200
2100120160

Leave a Reply

Your email address will not be published. Required fields are marked *