0
votes

Supprimer dupliquer tout en concaténant d'autres valeurs de colonnes

Mon tableau de données a l'air ci-dessous (Table1) xxx

La table de résultats souhaitée: xxx

voici ce que j'ai essayé: xxx

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)

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é?

J'espère que j'ai expliqué cela correctement. S'il vous plaît aider. Merci


0 commentaires

4 Réponses :


1
votes

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 xxx

La manière dont cela fonctionne:

La requête extérieure vous obtient essentiellement un résultat groupé sur iPaddress, port

La sous-requête corrélée fournit une liste délimitée de chaque ligne associée à IPAddress, Port

La logique de substance est de supprimer le premier "et"


4 commentaires

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')



2
votes

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


1 commentaires

Juste passer par le "string_agg". Bon de savoir cela.



0
votes

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


0 commentaires

1
votes
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

0 commentaires