我有一个包含这样数据的表格。
Id PId Device Status Type Created_Date
=== === ====== ====== ==== ============
1 2 1 today High 2012-04-12 08:11:51.583
2 2 4 today Medium 2012-04-02 01:39:52.393
3 3 5 today Medium 2012-04-02 01:10:02.443
4 2 6 today High 2012-04-02 01:05:25.063
5 2 3 today High 2012-04-02 01:03:08.360
6 2 7 today High 2012-04-02 01:02:57.093
7 2 2 today High 2012-04-02 00:22:37.807
现在,我希望设备6和7的记录始终位于记录集的顶部,并按创建日期的降序排列。并且在设备类型6和7的记录之后,按类型和创建日期降序排除6和7之外的设备记录。
所以期望的结果如下:
Id PId Device Status Type Created_Date
=== === ====== ====== ==== ============
4 2 6 today High 2012-04-02 01:05:25.063
6 2 7 today High 2012-04-02 01:02:57.093
1 2 1 today High 2012-04-12 08:11:51.583
5 2 3 today High 2012-04-02 01:03:08.360
7 2 2 today High 2012-04-02 00:22:37.807
2 2 4 today Medium 2012-04-02 01:39:52.393
我使用了以下查询:
select * from TblAlert where PId=2 and ( Device=6 OR Device=7) and ( Status='Today' or Status=0)
UNION
Select * from TblAlert Where PId=2 and ( Device<>6 OR Device<>7)and (Status='Today' or Status=0)
order by Type,Created_Date desc
但它不起作用,因为它在整个记录集上应用order by子句。
有人可以帮我这个吗?
答案 0 :(得分:4)
select *
from TblAlert
where PId=2 and ([Status]='Today' or [Status]='0')
order by case when Device in (6, 7) then 0 else 1 end,
case when Device in (6, 7) then [Type] else '' end,
Created_Date
答案 1 :(得分:0)
使用Table变量
解决了我自己的问题DECLARE @Records TABLE
(
Id int,
PId int,
Device int,
Status Alert_Type varchar(10),
Type Alert_Type varchar(5),
Created_Date DateTime
);
INSERT @Records
SELECT Id, PId, Device, Status,Type,Created_Date FROM
TblAlert
WHERE
PId =2
AND Device IN (6,7)
AND ( Status='Today' or Status=0)
ORDER BY
Created_Date DESC;
INSERT @Records
SELECT Id, PId, Device, Status,Type,Created_Date FROM
TblAlert
WHERE
PId =2
AND Device NOT IN (6,7)
AND ( Status='Today' or Status=0)
ORDER BY
Type, Created_Date DESC;
SELECT * FROM @Records;