我在Access中遇到了一个问题,我需要按一个包含剩余时间(ORDER BY Round([Days].[DRem],2)
的列进行排序,但如果数字低于0,我需要按包含文本的其他列进行排序。< / p>
当前查询是(更新):
SELECT
SR.SRNum,
Round([qSLADays].[SLDaysRemaining],2) AS SLADRem,
SR.SrFreeText
FROM
(
SR
INNER JOIN
qSLAHours
ON SR.RowID = qSLAHours.RowID
)
INNER JOIN
qSLADays
ON SR.RowID = qSLADays.RowID
WHERE
(
(
(Round([qSLADays].[SLDaysRemaining],2))>=0
And (Round([qSLADays].[SLDaysRemaining],2))<=1.5
)
AND
((SR.SRStatus) In ("Open","Resolution Identified"))
AND
((SR.SRSubstatus) In ("Assigned","Technical Action","Subject Expert Action","Active Investigation"))
AND
((SR.Team)="SWx PAS Support MILL")
)
OR
(
((SR.SRSubstatus) In ("Assigned","Technical Action","Subject Expert Action","Active Investigation"))
AND ((SR.SrFreeText) Like "PRIORITY*")
)
ORDER BY Round([qSLADays].[SLDaysRemaining],2) DESC;
我需要通过SLADRem订购,其中SLADRem&gt; 0 DESC否则由Freetext ASC订购,但看不到任何逻辑方式。
感谢任何帮助
我无法添加样本输出或样本输出的任何图像,因为我无法添加图像。但是,任何大于0的东西总是没有自由文本,所以我首先需要对大于0的任何东西进行排序。任何小于0的东西都需要按自由文本字段排序,该字段包含一个定义为“PRIORITY0X”的优先级编号E.G。:
0.93
0.52
0.49
0.16
-6.66 PRIORITY07
-7.34 PRIORITY02
-7.94 PRIORITY09
-8.32 PRIORITY01
-9.15 PRIORITY05
答案 0 :(得分:1)
处理这种情况的一种方法是在查询中包含可以排序的派生列。在您的情况下,您可以创建一个包含以下内容的列:
例如,对于样本数据[SampleData]
SampleID SLADrem Freetext
-------- ------- ---------
1 3.14 whatever1
2 5.00 whatever2
3 4.20 whatever3
4 0.00 bravo
5 -1.23 alpha
6 1.00 whatever4
7 -2.00 charlie
查询
SELECT
IIf(SLADRem>0, "A" & Format(999999 - SLADRem, "000000.00"), "B000000.00") & Left(Freetext, 50) AS SortKey,
*
FROM SampleData
ORDER BY 1;
返回
SortKey SampleID SLADrem Freetext
------------------- -------- ------- ---------
A999994.00whatever2 2 5.00 whatever2
A999994.80whatever3 3 4.20 whatever3
A999995.86whatever1 1 3.14 whatever1
A999998.00whatever4 6 1.00 whatever4
B000000.00alpha 5 -1.23 alpha
B000000.00bravo 4 0.00 bravo
B000000.00charlie 7 -2.00 charlie