2017-07-15 7 views
-2

Ce code ne fonctionne pasdonnées par accès CTE

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

Cette requête ne fonctionne pas correctement. Je veux que ce nom de pays apparaisse une fois et que toutes les villes appartenant à ce pays apparaissent dans une liste après le nom du pays. Par exemple, pays Pakistan sous le nom de pays toutes les villes du Pakistan devraient figurer dans une colonne.

+1

Pourquoi la balise mysql? –

+0

Pouvez-vous ajouter le code SQL pour cte_task ou nous montrer un échantillon de ce à quoi ressemblent ces données? – WJS

+0

'DISTINCT' n'est pas une fonction !!! C'est une partie de 'SELECT DISTINCT' et fonctionne sur l'ensemble des lignes sélectionnées. Ecrivez 'SELECT DISTINCT country ...' à la place, pour éviter toute confusion !!! – jarlh

Répondre

0

Vous pouvez gérer cela en utilisant 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

Le fait que vous utilisez un CTE n'est pas vraiment pertinent - il fonctionnera de la même façon avec un CTE comme il le ferait avec une table.

Voici une Fiddle SQL démontrant cette requête: http://sqlfiddle.com/#!6/9b8a02/19