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

时间:2018-12-16 14:32:58

标签: 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 = 'US' OR CNTR.Country = 'Germany' OR CNTR.Country = 'Mexico'

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

我正在使用SQL Server 2008

谢谢。

已更新:已添加架构

2 个答案:

答案 0 :(得分:1)

也许是根据一个国家的优先级来计算排名。
然后对此进行过滤。

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

答案 1 :(得分:0)

您可以使用“顶部”。 试试这个

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'