我的要求是根据最常用的诊断获取诊断列表。因此,为了实现这一点,我在数据库的tblDiagnosisMst表中添加了一个名为DiagnosisCounter的列,每次用户选择它时,每个诊断增加1。所以,我的查询如下:
select DiagnosisID,DiagnosisCode,Name from tblDiagnosisMst
where GroupName = 'Common' and RecStatus = 'A' order by DiagnosisCounter desc,
Name asc
因此,此查询帮助我获取诊断列表,但按诊断降序排列,然后按字母顺序排列诊断名称。但是现在我的客户想要在顶部只显示20个最常用的诊断名称,然后所有名称应按字母顺序显示。但不幸的是,我陷入了困境。如果我得到你对这个问题的有用建议,那将是非常感激的。
答案 0 :(得分:6)
这应该可以解决问题:
;With Ordered as (
select DiagnosisID,DiagnosisCode,Name,
ROW_NUMBER() OVER (ORDER BY DiagnosisCounter desc) as rn
from tblDiagnosisMst
where GroupName = 'Common' and RecStatus = 'A'
)
select * from Ordered
order by CASE WHEN rn <= 20 THEN rn ELSE 21 END,
Name asc
我们使用ROW_NUMBER
根据diagnosiscounter
为每行分配数字1-x。然后,我们将该值用于第一个ORDER BY
条件(如果它在1-20中),并且所有其他行在位置21
中平均排序。然后将第二个条件用作打破平局,以按name
对剩余行进行排序。
答案 1 :(得分:0)
试试这个
SELECT TOP 20
* FROM tblDiagnosisMst ORDER BY DiagnosisCounter;