I’m using SQL Server 2005. I have a series of product and pricing tables from which I draw a view that provides several line items for each product, depending on whether the item’s markup is set at item level, category level, or department level. So an example of the output for a single item would be:

What I’d like some help with – if it’s at all possible – is grouping the output or performing some additional query on it so that the three line items in my result are combined into a single line item, with all the possible markup levels on one line. I’ve been unable to think of a way to do this without requiring additional expensive server-side processing to create a temp table and apply some logic to it to combine the 3 lines into 1. The real issue is time, since iterating through a product database of over 30000 items and performing per-line steps on the whole thing strikes me as an extremely cumbersome way to do this.
If anyone might be able to help me out on this, I’d really appreciate it.
Based on what your data view looks like, the simplest solution is a set of unions. Probably not be most performant, but a lot simpler than trying to achieve it via upserts on a resultant temp table.
Code solution:
The results for your above example would give
I tested it with random “scatterings” of data across the three column groups and it works fine, placing items with the same “ids” in the same rows, will null values where the item was not listed in the category.
Like I said, not the most performant, so you would have to look at indexing, filtering etc to get the best results.