Question

J'ai deux tables Table1 et Table2. Table2 est d'avoir moins de nombre de lignes que Table1. Dans ces deux tableaux, il y a deux colonnes de date caldate1 dans le tableau 1 et caldate2 dans table2. Alors maintenant, je dois joindre à ces deux tables et obtenir le maximum des deux colonnes de date et de garder que nouvelle table. Mais si nous INNER JOIN sur ces deux tables les lignes de table1 qui ne sont pas là dans table2 ne vont pas dans la table finale. Nous avons donc besoin quelque chose comme

table1 
left outer join
table2

Mais il y a une situation que les deux dates ont des valeurs nulles. Alors Puis-je utiliser soudent pour obtenir les données correctes dans les scénarios ci-dessous ..

1. rangée dans le tableau 1 n'est pas là dans table2 -> alors le caldate1 dans le tableau 1 devrait aller en table finale.

2. rangée dans le tableau 1 est là dans table2 et caldate1 de table1 et caldate2 de table2 sont nulls -> alors nul devrait entrer en colonne date de la table finale

3. rangée dans le tableau 1 est là dans table2 et caldate1 est non nul et caldate2 est nulle -> alors caldate1 devrait entrer en table finale.

4. rangée dans le tableau 1 est là dans table2 et caldate1 est nulle et caldate2 est non nulle -> alors caldate2 devrait entrer en table finale

5. rangée dans le tableau 1 est là dans table2 et caldate1 est supérieure à caldate2 -> caldate1 devrait entrer en table finale

6. rangée dans le tableau 1 est là dans table2 et caldate2 est supérieure à caldate1 -> caldate2 devrait entrer en table finale

Nous ne devez considérer les lignes de table2 qui ne sont pas correspondant à table1. Donc, fondamentalement, j'ai besoin de toutes les lignes de table1 du dernier CALdAtE si une ligne particulière est là dans les deux tables. Merci d'avance. Je ne suis pas en mesure d'obtenir un fonctionnement correct de le faire it.Is il coalescent?

Était-ce utile?

La solution 2

Je pense à faire quelque chose comme ci-dessous pour satisfaire mes besoins.

SELECT 
a.number,
CASE WHEN ZEROIFNULL(a.caldate1) > ZEROIFNULL(b.caldate2)
THEN a.caldate1  -- This is working
ELSE
b.caldate2
END AS caldate
/*COALESCE (a.caldate1,caldate2) AS caldate*/ -- This is not giving max of dates
FROM 
table1  a
LEFT OUTER JOIN
table2  b
ON
a.number = b.number

Merci de votre aide. Maintenant, ce fait par la méthode ci-dessus.

Autres conseils

De la requête ci-dessus, si certains nombre présent dans table2 et non table1 , ces dossiers seront supprimés, vous pouvez utiliser jointure externe complète dans la requête ci-dessus.

OU Voir la requête ci-dessous couvrira également ce scénario.

sel number,max(date1) from (
  sel number,max(caldate1) as date1
    from table1
  union
  sel number,max(caldate2) as date1
    from table2
)tmp ;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top