I have a query that pulls sales history from an invoice table. Using a nested CASE statement, it dynamically assigns a period to each record, based on its invoice date:SELECT invoice_hdr.customer_id AS CustomerID, dbo.p21_view_inv_loc.item_id AS ItemID, invoice_line.customer_part_number AS CustPN, invoice_line.qty_shipped AS QtyShipped, invoice_line.extended_price AS Sales, CASE WHEN invoice_hdr.invoice_date > DATEADD(mm, - 24, GETDATE()) AND invoice_hdr.invoice_date <= DATEADD(mm, - 21, GETDATE()) THEN 'P1' ELSE (CASE WHEN invoice_hdr.invoice_date > DATEADD(mm, - 21, GETDATE()) AND invoice_hdr.invoice_date <= DATEADD(mm, - 18, GETDATE()) THEN 'P2' ELSE (CASE WHEN invoice_hdr.invoice_date > DATEADD(mm, - 18, GETDATE()) AND invoice_hdr.invoice_date <= DATEADD(mm, - 15, GETDATE()) THEN 'P3' ELSE (CASE WHEN invoice_hdr.invoice_date > DATEADD(mm, - 15, GETDATE()) AND invoice_hdr.invoice_date <= DATEADD(mm, - 12, GETDATE()) THEN 'P4' ELSE (CASE WHEN invoice_hdr.invoice_date > DATEADD(mm, - 12, GETDATE()) AND invoice_hdr.invoice_date <= DATEADD(mm, - 9, GETDATE()) THEN 'P5' ELSE (CASE WHEN invoice_hdr.invoice_date > DATEADD(mm, - 9, GETDATE()) AND invoice_hdr.invoice_date <= DATEADD(mm, - 6, GETDATE()) THEN 'P6' ELSE (CASE WHEN invoice_hdr.invoice_date > DATEADD(mm, - 6, GETDATE()) AND invoice_hdr.invoice_date <= DATEADD(mm, - 3, GETDATE()) THEN 'P7' ELSE (CASE WHEN invoice_hdr.invoice_date > DATEADD(mm, - 3, GETDATE()) AND invoice_hdr.invoice_date <= DATEADD(mm, - 0, GETDATE()) THEN 'P8' ELSE 'Px' END) END) END) END) END) END) END) END AS PeriodFROM dbo.invoice_line AS invoice_line INNER JOIN dbo.invoice_hdr AS invoice_hdr ON invoice_line.invoice_no = invoice_hdr.invoice_no INNER JOIN dbo.p21_view_inv_loc ON invoice_line.inv_mast_uid = dbo.p21_view_inv_loc.inv_mast_uid AND invoice_hdr.sales_location_id = dbo.p21_view_inv_loc.location_idWHERE (invoice_hdr.invoice_date > DATEADD(mm, - 24, GETDATE())) AND (invoice_line.company_id = '1') AND (invoice_hdr.sales_location_id IN (100001, 100002, 100005, 100006, 100007, 100008)) AND (invoice_hdr.branch_id = '01') AND (invoice_hdr.invoice_date <= DATEADD(mm, 0, GETDATE()))
This gives me something like this:101027 OR-225 ABC123 115.000000000 0.0000 P7101027 OR-225 ABC123 120.000000000 0.0000 P7100150 OR-225 ABC123 200.000000000 128.0000 P8101027 OR-225 ABC123 120.000000000 0.0000 P8In SSRS, I'm aggregating the data to use in a line graph:SELECT CustomerID, ItemID, CustPN, SUM(QtyShipped) AS QtyShipped, SUM(Sales) AS Sales, PeriodFROM a_CS_CustomerUsage_ChartGROUP BY CustomerID, ItemID, CustPN, PeriodHAVING (CustomerID = @CustomerID) AND (ItemID = @ItemID)
Which might produce something like this:101026 GR-0375 B30667 1500.000000000 795.0000 P7101026 GR-0375 B30667 3000.000000000 1590.0000 P8For consistency, I would like all periods to appear (P1-P8), so itermittent/non-existent ($0) sales would be very visible:101026 GR-0375 B30667 0 0 P1101026 GR-0375 B30667 0 0 P2101026 GR-0375 B30667 0 0 P3101026 GR-0375 B30667 0 0 P4101026 GR-0375 B30667 0 0 P5101026 GR-0375 B30667 0 0 P6101026 GR-0375 B30667 1500 795 P7101026 GR-0375 B30667 3000 1590 P8I'm not sure if this is something I can do in T-SQL, or something I need to adjust in SSRS (assuming it can be done at all).Many thanks in advance.