我有一个 select 语句,需要按两列对结果进行排序。我的问题是,当有特定值时,我只需要在第一列上应用排序。否则,我希望结果按第二列排序。
我相信我的解释让大多数人感到困惑,所以这里有一个例子:在大多数情况下,我希望结果按列 B(日期)DESC 排序。但是,在某些情况下,我需要在日期排序上方(或之前)显示记录。当 A 列(状态)的值为“需要响应”时会发生这种情况。所以,如果 Status = 'Needs Response' 那么我需要它在结果的顶部,但是,如果它有任何其他值,它应该只按 DESC 顺序按日期排序。
在我尝试实现这一点时,我使用了 CASE 语句,但每次尝试都会导致所有结果按状态排序,然后按日期排序。我需要的是仅在状态值 = '需要响应' 时应用的初始顺序。
Status | Date
---------------------------
Done | 11/25/2018
Done | 11/12/2018
Confirm | 10/10/2018
Needs Response | 12/5/2018
Acknowledge | 12/8/2018
Confirm | 12/1/2018
Needs Response | 11/24/2018
Confirm | 12/10/2018
Run Code Online (Sandbox Code Playgroud)
使用上面相同的数据,无论我如何尝试,我总是首先得到按状态排序的数据,然后按日期排序。使用 CASE 语句时,我可以在结果的顶部获得“需要响应”,但其余记录仍按日期之前的状态排序。
我期望的样本数据结果是:
Status | Date
---------------------------
Needs Response | 12/5/2018
Needs Response | 11/24/2018
Confirm | 12/10/2018
Acknowledge | 12/8/2018
Confirm | 12/1/2018 …Run Code Online (Sandbox Code Playgroud) 在我的VB应用程序中,我们可以根据各种预定义的日期范围运行报告,例如"本周"和"上个月".我想为'下个月'添加一个新范围.
我们定义的现有日期范围似乎与我迄今为止找到的其他解决方案的编码方式不同.我也尝试过变化,我认为这些变化是合乎逻辑的,可以证明是正确的.可悲的是,我还没有成功.
我们目前在VB中定义的范围格式如下:
Case 3 'This Week
StartDate = Now.Date.AddDays(-Now.Date.DayOfWeek)
EndDate = Now.Date.AddDays(6 - Now.Date.DayOfWeek)
Case 4 'This Month
StartDate = Now.Date.AddDays(-(Now.Day - 1))
EndDate = New DateTime(Now.Year, Now.Month, Date.DaysInMonth(Now.Year, Now.Month))
Run Code Online (Sandbox Code Playgroud)