2015-09-23 46 views
-1

我很抱歉这个问题的不稳定性,但我对SQL很陌生。我有以下表格:SQL - 递归查询来展开表格

表---------- -----------国家

地区 - 国家 - 城市

EMEA - 意大利 - 罗马

EMEA - 意大利 - 佛罗伦萨

EMEA - 西班牙 - 马德里

APJ - 日本 - 东京

APJ - 日本 - 广岛

APJ - 中国 - BEJIN

我将不得不展开它使用递归查询并获得什么如下:

EMEA

意大利

罗马

佛罗伦萨

西班牙

马德里

APJ

日本

东京

广岛

中国

BEJIN

我不知道从哪里开始..任何提示?

+0

这是一个很好的开始。 http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/ –

+0

所以你有3列的表,你想选择所有3列成一列? – sean

+0

是的,我确实想将表格打包成一个独特的列表。按照以下结构: 区域1 - >国家1 - >所有国家1 - >国家2 - >所有国家2 .... - >区域2 - >等等等等上。 – marcopo

回答

0

如果我理解正确的话,你想要得到的东西像这样的查询:

with united AS (
    SELECT DISTINCT 
     REGION col, 
     1 rnk, --Region goes before Countries and Cities 
     REGION, 
     null Country --we need only one appearance for each Region 
     FROM your_table 
    UNION ALL 
    SELECT DISTINCT 
     Country, 
     2, 
     REGION, 
     Country 
     FROM your_table 
    UNION ALL 
    SELECT 
     CITY, 
     3, 
     REGION, 
     Country 
     FROM your_table 
) 
select col 
FROM united 
ORDER BY REGION,Country,rnk 

fiddle

但没有递归。

+0

感谢德米特里,这返回预期的结果。但是没有递归,这是我现在面临的第一个话题。 我也尝试选择不同的子集和使用指针,但我不认为是SQL的最佳方式。 – marcopo