2

这是我的第一篇文章,我希望有人可以帮助我。我绝对不是 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 不按顺序排列。

我一直在努力打击谷歌,但运气并不好。也许我只是没有正确地表达我的搜索。我希望这个请求是可以理解的,并且有人可以提供帮助。最后,按这个顺序取回数据并不是绝对必要的,但这是我真正想看到的。

提前感谢您的任何帮助和建议!

玛拉基

4

1 回答 1

0

来自@Nikola 的评论:

您只需要按日期部分排序CashInDate

ORDER BY CAST(rt.CashInDate AS DATE) desc, rl.LookupName, rt.RegisterNum

于 2013-03-16T03:00:11.153 回答