数据访问通过CTE

问题描述:

此代码不能正常工作数据访问通过CTE

select Distinct(country) + ' ' + city AS [COUNTRY] from cte_task where country_code Between 92 AND 93 

此查询工作不正常。我希望该国名应出现一次,属于该国的所有城市都应出现在国名后的列表中。例如国名巴基斯坦所有城市都应该出现在一列。

+1

为什么MySQL的标签? –

+0

你可以添加cte_task的sql代码,或者向我们展示一下这些数据看起来像什么的样本? – WJS

+0

'DISTINCT'不是一个功能!它是'SELECT DISTINCT'的一部分,适用于整个选定的行。写'SELECT DISTINCT国家...',而不是,以避免混淆! – jarlh

您可以使用FOR XML PATH来处理此操作。

select distinct tsk2.country 
, substring(
    (
     Select ', ' + tsk1.city AS [text()] 
     From cte_task tsk1 
     Where tsk1.country = tsk2.country 
     ORDER BY tsk1.city 
     For XML PATH ('') 
    ), 2, 1000) [city] 
from cte_task tsk2 
where country_code Between 92 AND 93 

results

您使用的CTE事实是不是真的有关 - 它的工作方式相同的CTE,因为它会与表。

下面是一个SQL小提琴证明了该查询:http://sqlfiddle.com/#!6/9b8a02/19