我的要求是根据最常用的诊断获取诊断列表。因此,为了实现这一点,我在数据库的tblDiagnosisMst表中添加了一个名为DiagnosisCounter的列,每当用户选择该诊断时,该值就增加1。因此,我的查询如下所示:
select DiagnosisID,DiagnosisCode,Name from tblDiagnosisMst
where GroupName = 'Common' and RecStatus = 'A' order by DiagnosisCounter desc,
Name asc
因此,此查询帮助我获取“诊断”列表,但对于诊断而言,降序排列,然后对“诊断名称”按字母顺序排列。但是现在我的客户希望在顶部仅显示20个最常用的诊断名称,然后所有名称应按字母顺序显示。但不幸的是,我被困在这一点上。如果能得到您对这个问题的有用建议,那将是非常感激的。
这应该可以解决问题:
;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
,将数字1-x分配给每一行diagnosiscounter
。然后,ORDER BY
如果第一个条件的值在1-20之间,则我们将该值用于第一个条件,而所有其他行的位置均等21
。然后将第二个条件用作平局决胜者,以对其余的行进行排序name
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句