回答

收藏

SQL查询为列中的每个唯一值返回一条记录

技术问答 技术问答 227 人阅读 | 0 人回复 | 2023-09-13

我在SQL Server 2000中有一个表,试图以特定的方式查询。证明这一点的最佳方法是使用示例数据。
& |- f+ h1 i; k, w' r' ^看哪[Addresses]:/ g2 q" {' |/ K0 Z
Name         Street                 City          State
2 n0 Q% z: ]  k2 s1 Z--------------------------------------------------------
+ Y" P! b5 l) O( P5 yBob          123 Fake Street        Peoria        IL
; F+ x1 O) \9 C  V% c3 ^# EBob          234 Other Street       Fargo         ND
9 @+ L& \$ j" Q2 Q9 _$ jJim          345 Main Street        St Louis      MO
0 h2 ^- q0 Q; x, F3 J, I4 j这实际上是实际表结构的简化示例。该表的结构完全超出了我的控制范围。我需要一个查询,该查询将为每个名称返回一个地址。哪个地址都没有关系,只有一个地址就可以了。结果可能是这样的:
" g! f( H6 w; U# BName         Street                 City          State
/ k# Q8 D* ^1 Y! R% V2 ~--------------------------------------------------------
9 \! P, q9 M) J5 m) Z* DBob          123 Fake Street        Peoria        IL
$ G* T1 [( L' b0 h! |. @6 `5 TJim          345 Main Street        St Louis      MO* z) ^# @8 Q9 Z7 m+ i0 v! a4 l! u
更改表结构的建议对我无济于事。我同意这个表很糟糕,(比这里显示的还要糟糕),但这是我无法更改的主要ERP数据库的一部分。
7 g4 [) [7 h9 I! F1 D该表中大约有3000条记录。没有主键。- D6 D3 }! r) u# Y% o- k
有任何想法吗?7 v! M! C) N: ]6 p3 \
                  F7 ~: t5 D- m% d8 j7 k- r, ]
解决方案:
% e% Q9 w5 p, g               
  F# u# q0 D% u, n$ V- h( p5 Y7 n+ ~' j$ b: E( J9 W

, x8 G& t- E: e/ b: q5 V, }                好吧,这会给您带来非常糟糕的性能,但是我认为它会起作用& E3 T0 u- ?8 y0 W7 p+ G0 e
SELECT t.Name, t.Street, t.City, t.State# q' Z  Q! G& d$ B3 l! p( }
FROM table t
  A0 c! c# }  t2 h" E$ DINNER JOIN (6 n) _# f/ g( q5 s0 v
     SELECT m.Name, MIN(m.Street + ';' + m.City  + ';' + m.State) AS comb
8 L) ]4 ?) ?8 @9 z  F     FROM table m
' z, b  Z1 U  \  G     GROUP BY m.Name# N9 q; E7 D; M+ ~
) x
2 r* E/ R3 g$ \* z   ON  x.Name = t.Name: a+ j; [# R; V) d
   AND x.comb = t.Street + ';' + t.City  + ';' + t.State
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则