三百年来伤国步 发表于 2023-9-14 12:02:27

SQL Server 2008:TOP 10与众不同

如标题所示,我使用的是SQL Server2008。如果这个问题很基础,我深表歉意。我只用了几天的SQL。现在我有以下查询:
SELECT TOP 10 p.id, pl.nm, pl.val, pl.txt_val
from dm.labs pl
join mas_data.patients p   
on pl.id = p.id
where pl.nm like '%LDL%'
and val is not null
我想做的是在ID列中使用select top n以及不同的值。在一些论坛中搜索说要使用
SELECT DISTINCT TOP 10 ...
但是当我将第一行替换为
SELECT DISTINCT TOP 10 p.id, pl.nm, pl.val, pl.txt_val
我得到的结果与不使用不同词的结果相同。我应该怎么做才能只过滤出重复的ID条目?
谢谢你。
               
解决方案:
               


                简单的选项是使用分组依据,并为所有其他字段选择最小值/最大值
SELECT TOP 10
    p.id,
    max(pl.nm),
    max(pl.val),
    max(pl.txt_val)
from
    dm.labs pl
join
    mas_data.patients p   
on
    pl.id = p.id
where
    pl.nm like '%LDL%'
and
    val is not null
group by
    p.id
对于宽表来说这可能会很繁琐,所以另一种选择是使用排名和参与
SELECT TOP 10
    p.id,
   pl.nm,
   pl.val,
   pl.txt_val,
    rank() over(partition by p.id order by p.id) as Rank
from
    dm.labs pl
join
    mas_data.patients p   
on
    pl.id = p.id
where
    pl.nm like '%LDL%'
and
    val is not null
and
    Rank = 1
页: [1]
查看完整版本: SQL Server 2008:TOP 10与众不同