select * from hardware
where status = 1 and (ref = 'BBB' or ref= 'AAA' or ref = 'DDD')
order by case when ref = 'DDD' then 0 else 1 end, ref, 1
SELECT * FROM testSORT
ORDER BY CASE WHEN ref = 'DDD' THEN 1
WHEN ref= 'AAA' THEN 2
WHEN ref= 'BBB' THEN 3 END
/*------------------------
SELECT * FROM testSORT
ORDER BY CASE WHEN ref = 'DDD' THEN 1
WHEN ref= 'AAA' THEN 2
WHEN ref= 'BBB' THEN 3 END
------------------------*/
ref
--------------------
PC4 DDD
PC5 DDD
PC6 AAA
PC7 AAA
PC1 BBB
PC2 BBB
PC3 BBB
(7 row(s) affected)
select * from hardware where status = 1 and (ref = 'BBB' or ref= 'AAA' or ref = 'DDD')
ORDER BY CASE WHEN ref = 'DDD' THEN 1
WHEN ref= 'AAA' THEN 2
WHEN ref= 'BBB' THEN 3 END
CREATE TABLE hardware
(
ID INT
,[Status] SMALLINT
,vals VARCHAR(10)
,ref VARCHAR(10)
)
GO
INSERT INTO hardware VALUES
(1,1,'PC5 DDD','DDD'),
(8,1,'PC3 BBB','BBB'),
(3,1,'PC4 DDD','DDD'),
(4,1,'PC6 AAA','AAA'),
(5,1,'PC7 AAA','AAA'),
(6,1,'PC1 BBB','BBB'),
(7,1,'PC2 BBB','BBB'),
(9,2,'Pawan','R')
SELECT h.* FROM hardware h
CROSS APPLY ( VALUES ('AAA',2),('BBB',3),('DDD',1)) as rt(ref,orders)
WHERE [status] = 1 AND rt.ref = h.ref
ORDER BY rt.orders
/*------------------------
OUTPUT
------------------------*/
ID Status vals ref
----------- ------ ---------- ----------
1 1 PC5 DDD DDD
3 1 PC4 DDD DDD
4 1 PC6 AAA AAA
5 1 PC7 AAA AAA
8 1 PC3 BBB BBB
6 1 PC1 BBB BBB
7 1 PC2 BBB BBB
(7 row(s) affected)
Open in new window
SAMPLE TESTING
Open in new window
SOLUTION
Open in new window
OUTPUT
Open in new window