SQl按多列对数据进行排序

时间:2020-05-08 21:24:58

标签: c# sql-server sorting

我需要根据查询对下表进行排序:

SELECT *
FROM Likelihood WITH (NOLOCK) 
INNER JOIN Diagnosis ON Diagnosis.DiagnosisID = Likelihood.DiagnosisID
WHERE Likelihood.SessionID = (6768) 
ORDER BY Likelihood.Percentage DESC
    **Percentage   Diagnosis   Level**
    100            F43.10      HIGH
    83.333336      F84.5       HIGH
    75             F40.9       HIGH
    66.666664      F90.0       MEDIUM
    50             F51.09      MEDIUM

首先按Likelihood.Percentage降序排序。

然后在Level ='HIGH'时按诊断升序排序。诊断列是一个字符串。

当Level ='MEDIUM'时,按诊断升序排序

结果表应为:

**Percentage   Diagnosis   Level**
100            F43.10      HIGH
75             F40.9       HIGH
83.333336      F84.5       HIGH
50             F51.09      MEDIUM
66.666664      F90.0       MEDIUM

我尝试了此查询,但没有得到结果:

SELECT *
FROM Likelihood WITH (NOLOCK) 
INNER JOIN Diagnosis ON Diagnosis.DiagnosisID = Likelihood.DiagnosisID
WHERE Likelihood.SessionID = (6768) 
ORDER BY 
    case when Level='HIGH' and Percentage > 70 then Diagnosis.Diagnosis end
    , case when Level='Medium' and Percentage between 50 and 69 then Diagnosis.Diagnosis end
    , Likelihood.Percentage DESC

2 个答案:

答案 0 :(得分:2)

如果我理解正确,您只需要按条件指定一些顺序即可。首先是百分比,然后是水平(由于字母排序,HIGH应该在MEDIUM之前),然后是诊断。 因此,

order by 
    Percentage DESC,
    Level ASC, 
    Diagnosis ASC;

答案 1 :(得分:0)

这是多列排序的示例:

SELECT city,first_name,last_name
 FROM
sales.customers
ORDER BY
city DESC,
first_name ASC;

有关更多指南,请点击下面的链接

https://www.sqlservertutorial.net/sql-server-basics/sql-server-order-by/