My SQL is a bit rusty — is there a SQL way to project an input table that looks something like this:
Name SlotValue Slots ---- --------- ----- ABC 3 1 ABC 4 2 ABC 6 5
Into a ‘projected’ result table that looks like this:
Name SlotSum Slot ---- ------- ---- ABC 13 1 ABC 10 2 ABC 6 3 ABC 6 4 ABC 6 5
In other words, the result set should contain a number of rows equal to MAX(Slots), enumerated (Slot) from 1 to MAX(Slots), and Sum for each of these ‘slots’ should reflect the sum of the SlotValues projected out to the ‘Slots’ position. for the pathological case:
Name SlotValue Slots ---- --------- ----- ABC 4 3
we should get:
Name SlotSum Slot ---- ------- ---- ABC 4 1 ABC 4 2 ABC 4 3
The summation logic is pretty straightforward — project each SlotValue out to the number of Slots:
SlotValue SlotValue SlotValue Slot Sum --------- --------- --------- ---- --- 3 4 6 1 13 (3+4+6) 0 4 6 2 10 (0+4+6) 0 0 6 3 6 (0+0+6) 0 0 6 4 6 (0+0+6) 0 0 6 5 6 (0+0+6)
UPDATE: In the end I used a variant of LOCALGHOST’s approach in a stored proc. I was hoping there might be a way to do this without a loop.
I’m not sure you’ll be able to do this in a view. You’d have to use a procedure. You could make ProjectedTable a temporary/variable table in the procedure as well. I’d be really interested to see how you’d get this into a view because you need to dynamically generate a range of numbers.