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]