nsi*_*akr 0 sql database sql-server-2008
我的表格结构如下,样本数据如下:名称:用户
User Region
Sam USA
Meyer NA
Ying Japan
Yang Asia
Run Code Online (Sandbox Code Playgroud)
我还有另一张表,包括该地区和国家
名称:地区
Region Country RegionList
USA America
NA NULL USA
NA Canada
NA Mexico
Japan Japan
Asia NULL Central
Asia NULL East
Central India
East Dubai
Central Japan
Run Code Online (Sandbox Code Playgroud)
如何编写SQL服务器查询以列出他/她代表的每个用户和相应的国家/地区?
喜欢:
Sam America
Meyer America
Meyer Canda
Meyer Mexico
Ying Japan
Yang Japan
Yang India
Yang Dubai
Run Code Online (Sandbox Code Playgroud)
如果Region表可能具有无限多个级别,则可以使用公用表表达式.请参阅使用公用表表达式的递归查询.
WITH UserRegions (username, region, country)
AS
(
-- Anchor member definition
SELECT u.[user] AS username, r.regionlist AS region, r.country
FROM [User] u
JOIN Region r
ON u.Region = r.Region
UNION ALL
-- Recursive member definition
SELECT ur.username, r.regionlist AS region, r.country
FROM Region r
INNER JOIN UserRegions AS ur
ON r.Region = ur.Region
)
-- Statement that executes the CTE
SELECT username, country
FROM UserRegions
WHERE country IS NOT NULL
ORDER BY username
Run Code Online (Sandbox Code Playgroud)
http://sqlfiddle.com/#!3/ca9de/8