Rijen omzetten naar kolommen en omgekeerd

Gegevens opschonen in SQL Server-databases

Miriam Antona

Software Engineer

Draaitabellen in spreadsheets

  • Heel gebruikelijk
  • Groepeert data op basis van gekozen kolommen
  • Berekent statistieken over andere kolommen
Gegevens opschonen in SQL Server-databases

PIVOT gebruiken

PIVOT: zet unieke waarden uit één kolom om in meerdere kolommen.

Gegevens opschonen in SQL Server-databases

PIVOT gebruiken - Productnamen naar kolommen draaien

SELECT * FROM paper_shop_monthly_sales
| product_name_units | year_of_sale | month_of_sale |
|--------------------|--------------|---------------|
| notebooks-150      | 2018         | 1             |
| notebooks-200      | 2019         | 1             |
| notebooks-30       | 2019         | 2             |
| pencils-100        | 2018         | 1             |
| pencils-50         | 2018         | 2             |
| pencils-130        | 2019         | 1             |
| crayons-80         | 2018         | 1             |
| ...                | ...          | ...           |
Gegevens opschonen in SQL Server-databases

PIVOT gebruiken - Productnamen naar kolommen draaien

Zet om

| product_name_units | year_of_sale | month_of_sale |
|--------------------|--------------|---------------|
| notebooks-150      | 2018         | 1             |
| notebooks-200      | 2019         | 1             |
| pencils-50         | 2018         | 2             |
| crayons-80         | 2018         | 1             |
| ...                | ...          | ...           |

naar

| year_of_sale | notebooks | pencils | crayons |
|--------------|-----------|---------|---------|
| 2018         |  150      |  150    |  80     |
| 2019         |  230      |  130    |  170    |
Gegevens opschonen in SQL Server-databases

PIVOT gebruiken - Productnamen naar kolommen draaien

SELECT
    year_of_sale,
    notebooks,
    pencils,
    crayons
FROM
    (SELECT
    year_of_sale,
    SUBSTRING(product_name_units, 1, charindex('-', product_name_units)-1) AS product_name,
    CAST(SUBSTRING(product_name_units,
        charindex('-', product_name_units)+1, len(product_name_units)) AS INT) units
    FROM paper_shop_monthly_sales) AS sales
PIVOT (SUM(units)
FOR product_name IN (notebook, pencils, crayons))
AS paper_shop_pivot
Gegevens opschonen in SQL Server-databases

PIVOT gebruiken - Productnamen naar kolommen draaien

SELECT
    year_of_sale,
    notebooks,
    pencils,
    crayons
Gegevens opschonen in SQL Server-databases

PIVOT gebruiken - Productnamen naar kolommen draaien

SELECT
    year_of_sale,
    notebooks,
    pencils,
    crayons
FROM
    (SELECT
    year_of_sale,
    SUBSTRING(product_name_units, 1, charindex('-', product_name_units)-1) AS product_name,
    CAST(SUBSTRING(product_name_units,
        charindex('-', product_name_units)+1, len(product_name_units)) AS INT) units
    FROM paper_shop_monthly_sales) AS sales
Gegevens opschonen in SQL Server-databases

PIVOT gebruiken - Productnamen naar kolommen draaien

| year_of_sale | product_name | units |
|--------------|--------------|-------|
| 2018         | notebooks    | 150   |
| 2019         | notebooks    | 200   |
| 2019         | notebooks    | 30    |
| 2018         | pencils      | 100   |
| 2018         | pencils      | 50    |
| 2019         | pencils      | 130   |
| 2018         | crayons      | 80    |
| 2019         | crayons      | 90    |
| 2019         | crayons      | 80    |
Gegevens opschonen in SQL Server-databases

PIVOT gebruiken - Productnamen naar kolommen draaien

SELECT
    year_of_sale,
    notebooks,
    pencils,
    crayons
FROM
    (SELECT
    year_of_sale,
    SUBSTRING(product_name_units, 1, charindex('-', product_name_units)-1) AS product_name,
    CAST(SUBSTRING(product_name_units,
        charindex('-', product_name_units)+1, len(product_name_units)) AS INT) units
    FROM paper_shop_monthly_sales) AS sales
PIVOT (SUM(units)
Gegevens opschonen in SQL Server-databases

PIVOT gebruiken - Productnamen naar kolommen draaien

SELECT
    year_of_sale,
    notebooks,
    pencils,
    crayons
FROM
    (SELECT
    year_of_sale,
    SUBSTRING(product_name_units, 1, charindex('-', product_name_units)-1) AS product_name,
    CAST(SUBSTRING(product_name_units,
        charindex('-', product_name_units)+1, len(product_name_units)) AS INT) units
    FROM paper_shop_monthly_sales) AS sales
PIVOT (SUM(units)
FOR product_name IN (notebook, pencils, crayons))
Gegevens opschonen in SQL Server-databases

PIVOT gebruiken - Productnamen naar kolommen draaien

SELECT
    year_of_sale,
    notebooks,
    pencils,
    crayons
FROM
    (SELECT
    year_of_sale,
    SUBSTRING(product_name_units, 1, charindex('-', product_name_units)-1) AS product_name,
    CAST(SUBSTRING(product_name_units,
        charindex('-', product_name_units)+1, len(product_name_units)) AS INT) units
    FROM paper_shop_monthly_sales) AS sales
PIVOT (SUM(units)
FOR product_name IN (notebook, pencils, crayons))
AS paper_shop_pivot
Gegevens opschonen in SQL Server-databases

PIVOT gebruiken - Productnamen naar kolommen draaien

| year_of_sale | notebooks_units | pencils_units | crayons_units |
|--------------|-----------------|---------------|---------------|
| 2018         |  150            |  150          |  80           |
| 2019         |  230            |  130          |  170          |
Gegevens opschonen in SQL Server-databases

UNPIVOT gebruiken

UNPIVOT: zet kolommen om in rijen.

SELECT * FROM pivot_sales
| year_of_sale | notebooks | pencils | crayons |
|--------------|-----------|---------|---------|
| 2018         |  150      |  150    |  80     |
| 2019         |  230      |  130    |  170    |
Gegevens opschonen in SQL Server-databases

UNPIVOT gebruiken - Productnamen naar rijen draaien

SELECT * FROM pivot_sales
UNPIVOT
    (units FOR product_name IN (notebooks, pencils, crayons)
) AS unpvt
| year_of_sale | units | product_name |
|--------------|-------|--------------|
| 2018         | 150   | notebooks    |
| 2018         | 150   | pencils      |
| 2018         | 80    | crayons      |
| 2019         | 230   | notebooks    |
| 2019         | 130   | pencils      |
| 2019         | 170   | crayons      |
Gegevens opschonen in SQL Server-databases

Laten we oefenen!

Gegevens opschonen in SQL Server-databases

Preparing Video For Download...