|
如标题所示,我使用的是SQL Server2008。如果这个问题很基础,我深表歉意。我只用了几天的SQL。现在我有以下查询:
5 b$ c( h) R0 s# Z0 vSELECT TOP 10 p.id, pl.nm, pl.val, pl.txt_val
" t. A! N5 A7 {: {1 ]( r# Rfrom dm.labs pl9 |# m0 f2 H' l, C+ \" R
join mas_data.patients p ) C7 M. R6 R+ z: [' t2 ^- |* k1 z J
on pl.id = p.id3 t7 C( F* @& U p3 w0 e/ a4 y0 D- t
where pl.nm like '%LDL%'
, U$ L* P6 y; \* y; b* W and val is not null
4 {, f2 b) d/ V; M& k我想做的是在ID列中使用select top n以及不同的值。在一些论坛中搜索说要使用5 k0 [3 R' v2 ?
SELECT DISTINCT TOP 10 ...
7 n' m2 R1 B: @1 l5 Q2 U但是当我将第一行替换为% A, X4 Q4 |/ x+ B1 l6 i
SELECT DISTINCT TOP 10 p.id, pl.nm, pl.val, pl.txt_val
# Y) D" w k" i: ^3 C3 ]我得到的结果与不使用不同词的结果相同。我应该怎么做才能只过滤出重复的ID条目?2 J) C" E& g+ Y1 i( f3 `( u8 ]& t1 Y
谢谢你。; J! H8 Y1 E: q. m7 T
; `6 |& X* s/ P
解决方案:
3 U' q& ~; X2 C; a9 p. g 9 V' O* g# u- ]! w8 {3 M$ B5 D- j
% C6 v6 d" T( j; g/ r" x0 K! C$ i
$ ?; |2 f7 J8 D8 q; ]/ N 简单的选项是使用分组依据,并为所有其他字段选择最小值/最大值
- e: w3 y9 s' C6 m$ t" USELECT TOP 10 ! ?8 J& ^. w( I- T( d2 \! A
p.id,
8 G7 A' a; z0 N, V7 h+ I max(pl.nm),' v2 R. I; i3 E% u+ @4 Y* X6 k
max(pl.val),
: Y( Z9 ]' g% k b t max(pl.txt_val)
3 I5 Q* H2 M$ X% l4 m* P- cfrom / b) h, G/ l! e" z8 k* r/ J
dm.labs pl
' a L6 u* w7 Ojoin
& Z6 ?! u" h* g) j/ P. G t mas_data.patients p , i0 c" |9 q# E; p# W8 G# a9 N8 E3 U( l9 s
on ; f* h" x4 H- g/ E( t
pl.id = p.id
: O8 m% d/ @& a( l/ r where ; R) ~& \9 V. Z9 L/ S+ [
pl.nm like '%LDL%'7 g, R% ]' ~# j, F. G; a: o
and 0 d: V4 w& v) z8 \% L
val is not null+ U5 d( M8 z* l' L ?7 G7 ?
group by
& D1 ^9 |4 q* s& c( b p.id, K3 b- [5 z$ o2 c/ _6 b* p
对于宽表来说这可能会很繁琐,所以另一种选择是使用排名和参与
2 A* I K8 V5 FSELECT TOP 10 4 g' g& F) |7 H' q& ]0 o+ f
p.id,
, d' D; s& e) l& \ pl.nm,
2 G: h0 s6 n1 ]( q6 X/ `# F pl.val,
5 Q9 f2 D4 j* p _& u pl.txt_val,
3 l: e1 I6 c7 P: Z rank() over(partition by p.id order by p.id) as Rank6 F5 \. e9 S5 C! R$ `1 s1 n
from ' A4 }0 _5 v3 s% J4 S0 M+ \
dm.labs pl
$ M3 s& d& [/ F$ z: gjoin " k% w1 N& }" h- k; h
mas_data.patients p
, `7 Z5 T' q# r+ k0 S5 Hon
9 h' k) L) W- J5 X2 s* w6 Q, B) B8 S pl.id = p.id
4 O6 _: T6 w2 N3 g6 Z) P2 P6 c9 p where
5 K. }" f* O4 {' c pl.nm like '%LDL%'3 j$ V3 H) ], W/ f1 o$ u( _9 ]- u
and 6 p; C9 N- _0 [8 Y0 M' p6 o7 I5 ^9 I
val is not null0 l2 }1 n" U% L3 I. y2 J: U; i
and
" x8 ?0 [2 l& U4 b Rank = 1 |
|