我需要过滤出具有美国地址的公司,如果该公司没有美国地址,请改为显示德国地址,如果该地址不存在,则提供任何墨西哥地址...如果没有此类国家,则显示空单元格。
当前我有以下查询
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
谢谢。
已更新:已添加架构
答案 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'