MS访问按X排序除非Y < 0然后按Z排序

时间:2013-11-18 13:41:03

标签: sql ms-access-2007

我在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

1 个答案:

答案 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