Maison >base de données >tutoriel mysql >Comment puis-je joindre deux tables en fonction de leurs numéros de ligne dans SQL Server 2008 ?

Comment puis-je joindre deux tables en fonction de leurs numéros de ligne dans SQL Server 2008 ?

DDD
DDDoriginal
2024-12-25 00:44:10160parcourir

How Can I Join Two Tables Based on Their Row Numbers in SQL Server 2008?

Joindre des tables sur un numéro de ligne

Énoncé du problème :

Vous avez deux tables avec une caractéristique commune : leurs numéros de ligne . Votre objectif est d'effectuer une jointure interne sur cet attribut et de récupérer des données spécifiques.

Scénario spécifique :

Considérez deux tables, A et B, avec les données suivantes :

Tableau A

RowA
RowB
RowC
RowD

Tableau B

Row4
Row3
Row2
Row1

Sortie souhaitée :

  • RowA Row1
  • RowB Row2
  • RowC Row3
  • RangéeD Row4

Solution :

Pour obtenir la jointure interne souhaitée sur le numéro de ligne, vous pouvez utiliser la fonction ROW_NUMBER() dans SQL Server 2008 comme suit :

SELECT A.val, B.val
FROM (
    SELECT val, ROW_NUMBER() OVER (ORDER BY val) AS row_num
    FROM A
) AS A
JOIN (
    SELECT val, ROW_NUMBER() OVER (ORDER BY val) AS row_num
    FROM B
) AS B
ON A.row_num = B.row_num
ORDER BY A.val, B.val

Explication :

  • La fonction ROW_NUMBER() attribue un numéro de séquence à chaque ligne d'un tableau, en fonction du ORDER BY spécifié clause.
  • La condition de jointure A.row_num = B.row_num correspond aux lignes avec des numéros de ligne identiques, garantissant l'alignement de la jointure sur la ligne attribut number.
  • La clause ORDER BY A.val, B.val garantit que les lignes de sortie sont classées dans l'ordre séquentiel de la table A et de la table B.

Scénario alternatif :

Si vous souhaitez que les lignes apparaissent dans le même ordre que dans les tables individuelles sans clause ORDER BY, modifiez la requête vers :

SELECT A.val, B.val
FROM (
    SELECT val, ROW_NUMBER() OVER (ORDER BY val) AS row_num
    FROM A
) AS A
JOIN (
    SELECT val, ROW_NUMBER() OVER (ORDER BY val) AS row_num
    FROM B
) AS B
ON A.row_num = B.row_num

Cette révision élimine la clause ORDER BY supplémentaire, conservant la séquence originale de lignes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn