2017-07-15 122 views
-2

此代碼不能正常工作數據訪問通過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

回答

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