I'm running SQL Server 2005. I have 2 tables with the same columns but holding very different data.
SELECT *
FROM Table1
WHERE ItemID IN ('4','2','1')
ORDER BY
CASE WHEN ItemID = 4 then 1 WHEN ItemID = 2 then 2 WHEN ItemID = 1 then 3 END
UNION ALL
SELECT *
FROM Table2
WHERE ItemID IN ('3','1','5','2')
ORDER BY
CASE WHEN ItemID = 3 then 4 WHEN ItemID = 1 then 5 WHEN ItemID = 5 then 6 WHEN ItemID = 2 then 7 END
I need to keep the order of the ItemID
in the order that they are selected which is why I used CASE
. This all works fine on each table but I can't find a way to combine them into 1 table of results with the results of each table ordered.
i.e.
4 (Table1)
2 (Table1)
1 (Table1)
3 (Table2)
1 (Table2)
5 (Table2)
2 (Table2)
Extremely grateful for any and all help.
You can use the following query:
Calculated field
[Order]
guarantees that records fromTable1
will come first, followed by records ofTable2
. It also ensures ordering within eachTable1
orTable2
partition.Demo here
This is an alternative syntax without the use of
CROSS APPLY
:Demo here