Mon tableau de données a l'air ci-dessous (Table1) La table de résultats souhaitée: p> voici ce que j'ai essayé: p> Cependant, à partir de la requête ci-dessus, je suis capable d'atteindre la sortie souhaitée s'il n'y a que 2 lignes en double.
(Remarque: Ici, je considère ici la propriété intellectuelle et le port comme duplicata, tandis que d'autres colonnes ne sont pas dupliquées) p> Cependant, comment puis-je réaliser mon résultat souhaité lorsque la même iPaddress et le même port sont là dans 3 ou 4 ou 5 rangées? Veuillez noter que, le nombre de lignes ayant la même iPaddress et le même port est dynamique et cela peut aller plus de 10 fois par jour.
Alors, comment puis-je gérer une situation aussi dynamique tout en obtenant le résultat souhaité? P> J'espère que j'ai expliqué cela correctement. S'il vous plaît aider. Merci p> p>
4 Réponses :
Il s'agit d'une réponse à la création d'une liste délimitée (généralement une virgule, mais dans votre cas "et" délimitée)
essayez d'utiliser une matière dans cette colonne p> La manière dont cela fonctionne: p> La requête extérieure vous obtient essentiellement un résultat groupé sur iPaddress, port p> La sous-requête corrélée fournit une liste délimitée de chaque ligne associée à IPAddress, Port P > La logique de substance est de supprimer le premier "et" p> p>
Obtenir une erreur: "La fonction de substance nécessite 4 arguments (s)". Remarque: En ce moment, j'utilise SSMS et SQL Server 2017. De plus, permettez-vous de fournir des informations plus détaillées sur, comment fonctionne cette requête fonctionnant / requête?
Je crois, le len prendra un paramètre et dans votre requête il y a 2 paramètres. Le dernier paramètre devrait sortir de Len et doit être utilisé pour des trucs. Nice, va essayer de trouver comment pour le chemin XML fonctionne par le chemin.
Pardon. Je viens de taper cela dans la réponse et je n'ai pas vérifié. Je vais mettre à jour le contenu
J'ai raté une paren dans la len ('et')
Il suffit de voir votre commentaire Re: SQL 2017. Devrait-il indiquer que le devant, je travaille sur une technique d'agrégation de la vieille école qui me faisait chagrir. SQL 2017 nous a donné la fonction de String_Agg à long terme, ce qui le rend mort facile:
SELECT row_number() over (order by IPaddress, Port) ID ,IPaddress ,Port ,string_agg(Value, ' and ') from Table1 group by IPaddress ,Port
Juste passer par le "string_agg". Bon de savoir cela.
Vous pouvez essayer ceci:
select t.* from ( select ROW_NUMBER() over (partition by port order by port) rn,id,port,value=stuff ( ( select ' ' + value from @t t where t.port=t1.port for xml path ('')),1,1,'' ) from @t t1 group by id,port ) t where rn=1
SELECT t1.IpAddress,t1.port, value = STUFF(( SELECT ' and ' + t2.value FROM Table1 t2 WHERE t1.port = t2.port FOR XML PATH('') ),2, 3, '') FROM Table1 t1 GROUP BY t1.port,t1.IpAddress