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

rec*_*ive 8 sql t-sql sql-server-2000

我在SQL Server 2000中有一个表,我试图以特定的方式查询.显示此信息的最佳方式是使用示例数据.

看,[Addresses]:

Name         Street                 City          State
--------------------------------------------------------
Bob          123 Fake Street        Peoria        IL
Bob          234 Other Street       Fargo         ND
Jim          345 Main Street        St Louis      MO
Run Code Online (Sandbox Code Playgroud)

这实际上是实际表结构的简化示例.桌子的结构完全超出了我的控制范围.我需要一个查询,每个名称将返回一个地址.哪个地址无关紧要,只有一个地址.结果可能是这样的:

Name         Street                 City          State
--------------------------------------------------------
Bob          123 Fake Street        Peoria        IL
Jim          345 Main Street        St Louis      MO
Run Code Online (Sandbox Code Playgroud)

我在这里找到了一个类似的问题,但是由于我没有访问权限CROSS APPLY,所以在我的情况下没有给出任何解决方案,并且调用MIN()每个列会将不同的地址混合在一起,虽然我不关心返回哪个记录,但它必须是一个完整的行,而不是不同行的混合.

改变表结构的建议对我没有帮助.我同意这个表很糟糕(这比这里显示的更糟)但这是我无法改变的主要ERP数据库的一部分.

此表中有大约3000条记录.没有主键.

有任何想法吗?

Bri*_*edt 4

好吧,这会给你带来非常糟糕的性能,但我认为它会起作用

SELECT t.Name, t.Street, t.City, t.State
FROM table t 
INNER JOIN (
     SELECT m.Name, MIN(m.Street + ';' + m.City  + ';' + m.State) AS comb
     FROM table m
     GROUP BY m.Name
) x
   ON  x.Name = t.Name
   AND x.comb = t.Street + ';' + t.City  + ';' + t.State
Run Code Online (Sandbox Code Playgroud)