通过CTE访问数据

时间:2017-07-15 05:32:05

标签: sql sql-server sql-server-2008 sql-server-2005

此代码无效

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

此查询无法正常运行。我希望该国家/地区名称应该出现一次,所有属于该国家/地区的城市应该出现在国家/地区名称后面的列表中例如巴基斯坦所有城市的国名巴基斯坦应该出现在一个专栏中。

1 个答案:

答案 0 :(得分:0)

您可以使用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