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



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

目前我有以下查询

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'

但我的查询显示了美国、德国和墨西哥的地址。我只需要第一个找到的地址。

我正在使用SQL Server 2008

谢谢。

更新:添加了架构

也许可以根据国家的优先级计算排名
然后过滤。

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'

最新更新