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条记录.没有主键.
有任何想法吗?
好吧,这会给你带来非常糟糕的性能,但我认为它会起作用
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)