SQL Server:使用WHERE子句仅显示第一个找到的结果

SQL Server:使用WHERE子句仅显示第一个找到的结果,sql,sql-server,Sql,Sql Server,我需要筛选出美国地址的公司,如果公司没有美国地址,则显示德国地址,如果不存在,则显示任何墨西哥地址。。。如果没有这样的国家,显示空单元格 目前我有以下查询 SELECT COMP.CompanyName, CNTR.Country, CNTR.Address FROM [dbo].CompaniesTable COMP JOIN [dbo].CountriesTable CNTR on CNTR.accountid = COMP.accountid WHERE CNTR.Country =

我需要筛选出美国地址的公司,如果公司没有美国地址,则显示德国地址,如果不存在,则显示任何墨西哥地址。。。如果没有这样的国家,显示空单元格

目前我有以下查询

SELECT COMP.CompanyName, CNTR.Country, CNTR.Address 
FROM [dbo].CompaniesTable COMP
JOIN [dbo].CountriesTable CNTR on CNTR.accountid = COMP.accountid 
WHERE CNTR.Country = 'US' OR CNTR.Country = 'Germany' OR CNTR.Country = 'Mexico'
但我的查询显示了美国、德国和墨西哥的地址。 我只需要第一个找到的地址

我正在使用SQLServer2008

多谢各位


更新:添加了模式

可能根据国家的优先级计算排名。
然后再过滤一下

SELECT CompanyName, Country, [Address]
FROM
(
  SELECT 
    COMP.accountid, COMP.CompanyName, CNTR.Country, COMP.[Address], 
    DENSE_RANK() OVER (PARTITION BY COMP.CompanyName
                       ORDER BY CASE CNTR.Country 
                                WHEN 'US' THEN 1 
                                WHEN 'Germany' THEN 2
                                WHEN 'Mexico' THEN 3
                                ELSE 9
                                END) AS rnk
  FROM [dbo].CompaniesTable COMP
  JOIN [dbo].CountriesTable CNTR on CNTR.accountid = COMP.accountid 
  WHERE CNTR.Country IN ('US','Germany','Mexico')
) q
WHERE rnk = 1
你可以用“top”。 试试这个

SELECT top 1 COMP.CompanyName, CNTR.Country, CNTR.Address 
FROM [dbo].CompaniesTable COMP
JOIN [dbo].CountriesTable CNTR on CNTR.accountid = COMP.accountid 
WHERE CNTR.Country = 'US' OR CNTR.Country = 'Germany' OR CNTR.Country = 'Mexico'

您的表架构是什么?请分享您目前编写的代码。除了表格模式外,还请共享一些示例数据以及所需的输出。
Top1。。。当地址=。。。然后1 else 0 end asc/desc
在where子句中使用case语句。