【发布时间】:2012-11-30 00:19:05
【问题描述】:
这是我的第一篇文章,希望有人能帮助我。我绝对不是 DBA,但我已经在 MSSQL 和 MySQL 方面做了很多工作。但是,我似乎无法弄清楚这一点。我知道如何按多列排序,但在这种情况下,标准的“ORDER BY COL1、COL2、COL3”答案不会让我按照我希望它出现在网络应用程序中的顺序获取数据我'米楼。这是在 MSSQL Express 2008 R2 中。
我的查询并不是非常复杂,因为它包含一些简单的连接来获取一些额外的数据。它确实在同一实例中的几个数据库之间运行。查询的基础知识如下:
select rt.TotalsID, rl.LookupName, rt.RegisterNum, cin.userFirstName, rt.CashInDate
from [RegisterApp].[dbo].[Reg_Totals] rt
inner join [RegisterApp].[dbo].[Reg_Lookup] rl on rl.LookupID = rt.StoreID
inner join [KR_Users_Groups_Permissions].[dbo].[tbl_user] cin on cin.userId = rt.CashInUserID
inner join [KR_Users_Groups_Permissions].[dbo].[tbl_user] cout on cout.userId = rt.CashOutUserID
我想按 rt.CashInDate、rl.LookupName 和 rt.RegisterNum 排序结果。但是,正如我所说,仅标准的多列 order by 语句并不能满足我的需求。由于可以按任何顺序输入有问题的数据,因此以这种方式排序的结果确实会首先按最近的日期排序 (rt.CashInDate desc),但随后 rl.LookupName 和 rt.RegisterNum 值受时间的影响在第一列。我希望在结果中看到的是,对于每一天,rl.LookupName 都按升序排序,然后对于其中的每个 rl.LookupName,每个 rt.RegisterNum 结果也按升序排序。
有标准
order by rt.CashInDate desc, rl.LookupName, rt.RegisterNum
结果取决于每行的 rt.CashInDate 是什么。例如,昨天的结果与上面的 order by 语句如下所示:
TotalsID LookupName RegisterNum userFirstName CashInDate
12 Polyclinic RG2 Joshua 2012-11-28 10:18:00
13 Polyclinic RG3 Joshua 2012-11-28 10:18:00
11 Polyclinic RG1 Joshua 2012-11-28 09:56:00
10 Downtown RG1 JJ 2012-11-28 08:22:00
我想看到的是这样显示的数据:
TotalsID LookupName RegisterNum userFirstName CashInDate
10 Downtown RG1 JJ 2012-11-28 08:22:00
11 Polyclinic RG1 Joshua 2012-11-28 09:56:00
12 Polyclinic RG2 Joshua 2012-11-28 10:18:00
13 Polyclinic RG3 Joshua 2012-11-28 10:18:00
当然,对于昨天的结果,rt.TotalsID 是有序的,但也并非总是如此。例如,这里是 26 日的结果,它们按照我希望看到的顺序显示:
TotalsID LookupName RegisterNum userFirstName CashInDate
5 Downtown RG1 JJ 2012-11-26 08:27:00
2 Polyclinic RG1 Joshua 2012-11-26 07:33:00
3 Polyclinic RG2 Joshua 2012-11-26 07:33:00
4 Polyclinic RG3 Joshua 2012-11-26 07:33:00
请注意 rt.TotalsID 在这种情况下不按顺序排列。
我一直在努力打击 Google,但运气不佳。也许我只是没有正确地表达我的搜索。我希望这个请求是可以理解的,并且有人可以提供帮助。最后,按这个顺序取回数据并不是绝对必要的,但这是我真正希望看到的。
提前感谢您的任何帮助和建议!
玛拉基
【问题讨论】:
-
哦,忘了说第三个连接正在使用中,我只是没有在我提供的示例查询中包含我从中提取数据的每一列。
-
您可以仅按 CashInDate 的日期部分排序:
order by cast (rt.CashInDate as date) desc, rl.LookupName, rt.RegisterNum。 -
@Nikola 你必须回答这个问题。
-
哇...这就是我来这里的原因。这绝对是我应该做的,尼古拉,谢谢!我真的不知道为什么我没有想到这一点。我想我是想把这件事弄得过于复杂,正如众所周知的那样。这是一个美丽而简单的解决方案。如果您按照 jachguate 的建议做出回答,我会将其标记为已接受的答案。
标签: sql-server-2008-r2 multiple-columns