bar*_*san 0 sql sql-server sql-server-2005
我的要求是根据最常用的诊断获取诊断列表.因此,为了实现这一点,我在数据库的tblDiagnosisMst表中添加了一个名为DiagnosisCounter的列,每次用户选择它时,每个诊断增加1.所以,我的查询如下:
select DiagnosisID,DiagnosisCode,Name from tblDiagnosisMst
where GroupName = 'Common' and RecStatus = 'A' order by DiagnosisCounter desc,
Name asc
Run Code Online (Sandbox Code Playgroud)
因此,此查询帮助我获取诊断列表,但按诊断降序排列,然后按字母顺序排列诊断名称.但是现在我的客户想要在顶部只显示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
Run Code Online (Sandbox Code Playgroud)
我们使用ROW_NUMBER为每个行分配数字1-x,基于diagnosiscounter.然后我们将该值用于第一个ORDER BY条件(如果它在1-20中),并且所有其他行在位置上排序相同21.然后将第二个条件用作打破平局,以对那些剩余行进行排序name.
| 归档时间: |
|
| 查看次数: |
78 次 |
| 最近记录: |