Welcome Back

Google icon Sign in with Google
OR
I agree to abide by Pharmadaily Terms of Service and its Privacy Policy

Create Account

Google icon Sign up with Google
OR
By signing up, you agree to our Terms of Service and Privacy Policy
Instagram
youtube
Facebook

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: