I have a query that UNIONs two somewhat similar datasets, but they both have some columns that are not present in the other -- i.e. the columns have NULL values in the resulting UNION. The purpose of the UNION is to get the data in a friendly format for the software-side.
The problem is, I need to ORDER the resulting data using those columns that only exist in one or the other set.
For example: Table1 has fields ID, Cat, Price. Table2 has fields ID (same as in Table1), Name, Abbrv.
My query looks like something like this:
SELECT t1.ID, t1.Cat, t1.Price, NULL as Name, NULL as Abbrv FROM t1
UNION
SELECT t2.ID, NULL as Cat, NULL as Price, t2.Name, t2.Abbrv FROM t2
ORDER BY Price DESC, Abbrv ASC
The ORDER BY is where I'm stuck. The data looks like this:
100---Balls-----1.53----------------------
200---Bubbles---1.24----------------------
100---------------------RedBall----101RB--
100---------------------BlueBall---102BB--
200---------------------RedWand----201RW--
200---------------------BlueWand---202BW--
But I want it to look like this:
100---Balls-----1.53----------------------
100---------------------RedBall----101RB--
100---------------------BlueBall---102BB--
200---Bubbles---1.24----------------------
200---------------------RedWand----201RW--
200---------------------BlueWand---202BW--
(apologies if those are hard to read--didn't know how else to show a table)
Keep in mind this is a very dumbed-down example and the proverbial "use a JOIN!" answer is not applicable (i.e. I already know how to JOIN them but that's not what I want in the end-result).
It could very well be that the only way to achieve this is by manipulating the data in software once it comes back from the data-layer--if that's the case then so be it. But I'm hoping it can be done in TSQL.