数据访问通过CTE
问题描述:
此代码不能正常工作数据访问通过CTE
select Distinct(country) + ' ' + city AS [COUNTRY] from cte_task where country_code Between 92 AND 93
此查询工作不正常。我希望该国名应出现一次,属于该国的所有城市都应出现在国名后的列表中。例如国名巴基斯坦所有城市都应该出现在一列。
答
您可以使用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
您使用的CTE事实是不是真的有关 - 它的工作方式相同的CTE,因为它会与表。
下面是一个SQL小提琴证明了该查询:http://sqlfiddle.com/#!6/9b8a02/19
为什么MySQL的标签? –
你可以添加cte_task的sql代码,或者向我们展示一下这些数据看起来像什么的样本? – WJS
'DISTINCT'不是一个功能!它是'SELECT DISTINCT'的一部分,适用于整个选定的行。写'SELECT DISTINCT国家...',而不是,以避免混淆! – jarlh