2011-07-14 4 views
0

EDIT: Je l'ai écrit un peu mal maillant changer mon QSQL Server simple problème

Je suis un débutant avec SQL et j'ai Q ..

I fait 2 Temp. Les tables. Chacun a 25 lignes. (DateValue)

Je veux combiner ces 2 tables dans une troisième table .. Première table est [De] deuxième tableau est [à] ... Les deux tables ont des valeurs différentes

Je veux l'obtenir comme ceci:

From| To | 
1111|2222 
2222|3333 
3333|4444 

etc ..

J'utilise cette requête simple

Create Table #T3 
( 
    [From] Datetime 
    ,[To] Datetime 
) 

INSERT Into #T3 
SELECT Distinct #T1.[From], #T2.[To] 
From #T1,#T2 
Where #T1.[From] is not null 
And #T2.[To] is not null 

Select * from #T3 

Drop Table #T3 
Drop Table #T2 
Drop Table #T1 

Mais mes résultats sont comme ça

From| To | 
1111|1111 
1111|2222 
1111|3333 
2222|1111 
2222|2222 
2222|3333 

Il multiplie le premier champ avec le second Wich me donne beaucoup plus de disques arrière ..

Toute aide? MERCI!

+1

Vous ne fournissez pas suffisamment d'informations. Qu'est-ce qui est dans # T1, # T2? Quelles sont les clés? Qu'est-ce que vous essayez exactement d'accomplir? – Blazes

+0

Changez le contrôle en contrôle d'égalité: 'Où # T1. [From] = # T2. [To]'. Et vous n'avez probablement pas besoin du 'DISTINCT' du tout. –

+0

Quelle est la relation entre ces deux tables (# T1 et # T2), sont leur toute clé? – Scorpion

Répondre

1

Après modifier

de l'OP Cela peut fonctionner comme vous voulez (ce qui est tout à fait clair):

INSERT INTO #T3 
    SELECT #T1.[From] 
     , MIN(#T2.[To]) 
    FROM #T1 
    JOIN #T2 
     ON #T1.[From] < #T2.[To] 
    GROUP BY #T1.[From] 

En utilisant

FROM T1, T2 

résultats dans toutes les combinaisons ou des rangées de T1 et T2. Il a appelé un produit en croix et (correctement) utilisé avec CROSS JOIN, comme ceci:

FROM T1 CROSS JOIN T2 

Lorsque vous voulez joindre les deux tables en fonction d'une condition (et non obtenir le produit croisé), vous utilisez un JOIN ou INNER JOIN (ces deux sont même chose):

FROM T1 JOIN T2 
    ON T1.[From] = T2.[To] 

vous obtiendrez toutes les lignes combinaisons où T1.From matchs T2.To (sur l'égalité).Je suppose que vous vouliez faire correspondre chaque ligne de T1 avec la ligne T2T2.To était juste plus grand que T1.From donc j'ai utilisé l'opérateur "plus petit que" < au lieu de l'opérateur "égalité" =.

Les GROUP BY et MIN() ont été ajoutés pour obtenir seulement celui avec le plus petit T2.To de ces lignes.

+0

THANKYOU qui a fait le travail! Thankyou tellement – Gigli

+0

+1 pour trouver une question tordue avec l'entrée limitée: D – Jacob

+0

Désolé de donner pas tellement d'information. – Gigli

0

Cela ferait l'affaire. Il va insérer une copie de la table 2 pour chaque ligne du tableau 1, comme vous ne l'avez pas dit comment cela fonctionne pour extraire ce que vous voulez.

Maintenant, en supposant de et sont les mêmes .. vous pouvez le faire

INSERT Into #T3 
SELECT Distinct #T1.[From], #T2.[To] 
From #T1 left join #T2 on #T1.[From]=#T2.[To] 
Where #T1.[From] is not null 

si ce isnt comment vous dire (bien ayant la même valeur dans les deux colonnes semble contre-productif en ce sens), ce que d'autres champs avez-vous et comment voulez-vous attacher les lignes ensemble.