3 Réponses :
Si vous utilisez Sortie forte> p> SQL Server code>, vous pouvez essayer comme suit. SELECT c.id AS country_id,
c.country,
t.user
FROM (SELECT s.country_id,
s.user,
s.id,
CASE
WHEN (SELECT Min(id)
FROM second s2
WHERE s2.country_id = s.country_id) = s.id THEN 1
ELSE 0
END rn
FROM second s) t
LEFT JOIN country c
ON t.country_id = c.id
AND t.rn = 1
ORDER BY t.country_id ,t.id
Ici, vous pouvez utiliser des méthodes d'agrégation de MySQL et PostgreSQL Group_ConCAT et StringGreSQL (StringGreSQL Group_ConCAT et String_Agg (Certains_Column, ',') Méthodes de joindre des noms avec des virgules et obtenir 1 enregistrement pour chaque pays en conséquence.
pour mysql p> blockQuote>
xxx pré> pour postgreSQL p> blockQuote>
xxx pré> il produira des résultats similaires à p>
xxx pré> p>
Une bonne idée. Ce serait vraiment ma façon préférée de le faire dans SQL. Si des lignes séparées sont souhaitées comme indiqué dans la demande, je vous soucies de cette disposition sur mon application ou site Web, pas dans SQL.
Merci, j'ai utilisé Listagg à DB2
Utiliser retard code> pour voir si la ligne précédente contient le même pays. select
case when lag(c.id) over (order by c.id, u.user) = c.id then null else c.id end
as country_id,
case when lag(c.id) over (order by c.id, u.user) = c.id then null else c.country end
as country,
u.user
from countries c
join users u on u.country_id = c.id
order by c.id, u.user;
J'ai enlevé toutes ces étiquettes de SGBD en conflit. Pouvez-vous en remettre l'un d'entre eux, celui des SGBD en fait utilisé.
C'est quelque chose que je ferais dans une présentation, une couche ci-dessus.