Instagram
youtube
Facebook
Twitter

Write a Query to Pivot Payments by Month

Write a Query to Pivot Payments by Month

Customers Table:


Query Explanation :

  • The purpose of this query is to display each customer’s payments for January, February, and March in a single row.
     This is called pivoting — transforming rows into columns.

  • The Customers table is included in the query and given an alias c.
     This allows us to refer to it easily using c.

  • The Payments table is joined using a LEFT JOIN with the Customers table.
     This ensures that even customers who have not made any payments still appear in the result.

  • The SELECT clause uses SUM(CASE WHEN ... THEN ... ELSE ... END) three times — once for each month:

    • If the row’s PaymentMonth = 'January', then include its Amount.

    • Otherwise, use 0.

    • The same logic applies for 'February' and 'March'.

  • SUM(...) is used because a customer may have made multiple payments in a single month.
     Using SUM totals up all payments for that month per customer.

  • GROUP BY c.CustomerName ensures that each customer’s name appears only once in the result,
     and the total payment for each month is displayed beside their name.


SQL Query:

SELECT 
    c.CustomerName,
    SUM(CASE WHEN p.PaymentMonth = 'January' THEN p.Amount ELSE 0 END) AS January,
    SUM(CASE WHEN p.PaymentMonth = 'February' THEN p.Amount ELSE 0 END) AS February,
    SUM(CASE WHEN p.PaymentMonth = 'March' THEN p.Amount ELSE 0 END) AS March
FROM Customers c
LEFT JOIN Payments p 
    ON c.CustomerID = p.CustomerID
GROUP BY c.CustomerName;


Output: