SQL Server查询 - 多个按顺序列和每个相同的分组

时间:2015-06-03 09:25:34

标签: sql sql-server sql-server-2008 tsql

样本表

enter image description here

我需要按REMARKS按升序排序上面的记录,然后按FIRSTDATE按降序排序,然后按LASTDATE按降序排序

我做这个查询

select * from tblRecord 
order by Remarks, FirstDate desc, Lastdate desc

并给我这个输出

enter image description here

应该是这样的:

enter image description here

更新 StartdateEnddate是指租户的实际开始日期和最后日期操作,我想要的是每个备注分开租户的排序,当停止时,排序应该基于firstdate的降序,启动时,应按降序排列。

2 个答案:

答案 0 :(得分:2)

这可能有助于您在CASE

中使用ORDER BY
SELECT * FROM tblRecord 
ORDER BY CASE Remarks WHEN 'started' THEN Lastdate
                      ELSE FirstDate END
DESC

答案 1 :(得分:1)

不确定你正在寻找的是什么,因为你现在没有回应,我有两种情况可以得到你想要的结果,其中一种肯定是错误的或者两者都可能是错的,但它们都会使用您提供的测试数据生成您正在寻找的结果

情况1:当您的言论停止时,您需要通过startdate降序进行排序,并且在开始评论时通过startdate升序进行排序,在这种情况下您将获得此代码:SQLFIDDLE

select * from mytable
order by remarks,
CASE WHEN remarks = 'started'
THEN startdate END ASC,
CASE WHEN remarks ='ceased'
THEN startdate END DESC,
enddate DESC

情况2:当你的评论停止时,你需要通过startdate订购记录,当评论开始时你需要按enddate排序,在这种情况下查询将是:SQLFIDDLE

select * from mytable
order by remarks,
CASE WHEN remarks = 'started'
THEN enddate END DESC,
CASE WHEN remarks ='ceased'
THEN startdate END DESC;