J'ai besoin de code SQL pour le problème ci-dessous
J'ai deux table comme indiqué ci-dessous p> Ces deux tables ont un nom de clé primaire. P> Sortie souhaitée p>
4 Réponses :
Vous devrez effectuer deux étapes. P>
rejoindre les deux tables sur nom, sélectionnez ID et tapez. Votre SQL ressemblera à quelque chose comme: p>
Sélectionnez ID, tapez à partir de la table1, Table2 où Tableau1.name = Table2.name P> li>
Utilisez l'une des solutions fournies dans Cet excellent précédent Réponse pour réduire la colonne dupliquée dans une colonne séparée par des virgules en fonction de votre base de données. P> li> ol>
Le code ci-dessous ne fonctionne que si l'ID est unique. Veuillez ignorer cette réponse comme expliqué dans les commentaires.
select PersonName.Name, STRING_AGG(NameType.Type, ',') as 'Type' from PersonName
left outer join NameType
on PersonName.Name = NameType.Name
Group by PersonName.Name
Bonjour @raja, votre exemple est pour SQLServer, je crois. Eh bien, comme vous pouvez le voir ici: dbfiddle.uk/... Votre requête ne fonctionne pas. 1. Il renvoie le nom et non ID en tant qu'IP demandé. 2. Il renvoie également plusieurs valeurs pour le type. J'espère que cela aidera ... Cheers!
Merci. Ma faute. Je pensais que la première colonne ID de table était une clé primaire.
Bonjour Raja, merci pour votre réponse .. mais je reçois une erreur comme "Erreur SQL [9829] [S0001]: String_Agg Résultat d'agrégation a dépassé la limite de 8 000 octets. Utilisez des types LOB pour éviter la troncature des résultats."
Bonjour @srisri, donc aucun de mes exemples n'a contribué? Je vous ai envoyé de la démo où vous pouvez voir comment cela fonctionne pour chaque base de données spécifiée et avec vos données! Qu'est-ce qui semble être un problème là-bas? Avec ma requête, vous obtenez exactement vous avez demandé ...
Si vous utilisez oracle fort>: voici le Démo pour Oracle STRY>. P> Si vous utilisez SELECT A.ID, GROUP_CONCAT(B.type ORDER BY B.NAME separator ',')
FROM
(SELECT t1.NAME, t1.ID
FROM t1
GROUP BY t1.NAME, t1.ID) A
JOIN
(SELECT t2.NAME, t2.`type`
FROM t2
GROUP BY t2.NAME, t2.`type`) B
ON A.NAME = B.NAME
GROUP BY A.ID;
@Raha, je crois que cette solution ne supprimera pas le double type 'pa' que l'OP a dans ses données. Cochez la démo: dbfiddle.uk/...
Merci pour votre réponse . Mais je reçois l'erreur comme "Erreur SQL [9829] [S0001]: String_Agg Résultat d'agrégation a dépassé la limite de 8 000 octets. Utilisez des types de lobes pour éviter les résultats de la troncature."
Tag the DBMS (
mysql code>,SQL Server code>, etc.) que vous utilisez.Les deux DBMS sont différents. Donc, étiquetez seulement que vous utilisez vraiment.
Dupliqué possible de Comment concaténer le texte de plusieurs lignes dans une seule chaîne de texte dans SQL Server?
Aussi numéro de version plz.