2010-10-14 5 views
0

Je dois vous poser des questions, j'ai du mal à combiner deux tables, je n'arrive pas à trouver la bonne requête.SQLServer joignent deux tables

J'ai deux tables: T1: 1column, a des dossiers X T2: 1column, A disques Y Note: Y ne pourrait jamais être supérieur à X, mais souvent moins que celui-ci

Je veux rejoindre ces tables afin d'avoir une table avec deux colonnes t3: ColumnFromT1, columnFromT2.

Lorsque Y est inférieur à X, les valeurs de champ T2 sont répétées et sont réparties sur toutes mes autres valeurs, mais je veux obtenir NULL lorsque toutes les colonnes de T2 sont utilisées.

Comment pourrais-je y parvenir? Merci

Répondre

2

Vous pouvez attribuer à chaque table un numéro de ligne dans une sous-requête. Vous pouvez ensuite vous joindre à ce numéro de ligne. Pour recycler les lignes de la deuxième table, prenez le module % du numéro de ligne de la première table.

Exemple:

select Sub1.col1 
,  Sub2.col1 
from (
     select row_number() over (order by col1) as rn 
     ,  * 
     from @T1 
     ) Sub1 
left join 
     (
     select row_number() over (order by col1) as rn 
     ,  * 
     from @T2 
     ) Sub2 
on  (Sub1.rn - 1) % (select count(*) from @T2) + 1 = Sub2.rn 

données de test:

declare @t1 table (col1 int) 
declare @t2 table (col1 datetime) 

insert @t1 values (1), (2), (3), (4), (5) 
insert @t2 values ('2010-01-01'), ('2012-02-02') 

Cette impression:

1  2010-01-01 
2  2012-02-02 
3  2010-01-01 
4  2012-02-02 
5  2010-01-01 
+0

MERCI. Idée intelligente – CoolStraw

1

Vous êtes à la recherche d'un LEFT JOIN (http://www.w3schools.com/sql/sql_join_left.asp) par ex. T1 LEFT JOIN T2

dire qu'ils ont tous les deux CustomerID colonne en commun

SELECT * 
    FROM T1 
     LEFT JOIN 
     T2 on t1.CustomerId = T2.CustomerId 

Cela renverra tous les enregistrements de T1 et ceux qui correspondent à T2 avec les valeurs NULL des valeurs T2 où ils ne correspondent pas.

Assurez-vous que vous joignez les tables sur une colonne commune (ou ensemble de colonnes communes si plusieurs colonnes sont nécessaires pour effectuer la jointure). Sinon, vous effectuez une jointure cartésienne (http://ezinearticles.com/?What-is-a-Cartesian-Join?&id=3560672)

+0

Salut retour, je vous remercie Tanging. Même si je ne peux pas le faire car je n'ai aucune condition, tout ce que j'ai à faire est de lier les deux tables en fonction de leur ordre actuel. Je n'ai qu'une colonne par table et ne peut pas faire "ON " (T1 a un int, T2 a un DATETIME) – CoolStraw