2010-07-18 10 views
0

En un mot ici est ce que je veux arriver:Comment puis-je coder cette condition Intéressant Rejoindre SQL

Remplissez la jointure, si les lignes n'existent pas la même jointure, mais en utilisant une valeur différente pour remplir le null colonnes dans chaque rangée.

Voici mes rejoindre:

Left Join CMS_ECH.dbo.hsplit hsplit on hsplit.row_date = ANDREWSTABLE.SegStart_Date 
and hsplit.split=ANDREWSTABLE.dispsplit 
and hsplit.starttime = ANDREWSTABLE.Interval 
and hsplit.acd = ANDREWSTABLE.acd1 

Où ACD1 est 1 ou 4.

Pour certaines lignes, il y aura des valeurs nulles. Si le résultat de la jointure renvoie un row_date nul alors ... et voici où mes connaissances me manquent ... donc pour l'amour de pas d'autres mots pour le décrire ... rejoindre les lignes nulles dans la table en utilisant une valeur différente pour acd1. Si wcd1 = 1 puis utilisez 4. Si wcd1 est 4 puis utilisez 1.

J'utilise MS SQL 2005

Répondre

0

La plupart (sinon tous) les dialectes SQL ont une fonction ISNULL() ou COALESCE(), qui vous permet de spécifier une valeur alternative lorsque la colonne sous-jacente est NULL.

+0

En utilisant MS SQL 2005, merci! – CodingIsAwesome

1

Cela le fera, il ne fonctionnera pas brillamment car l'instruction CASE interférera avec le choix de l'index, mais essayez-le et espérez le meilleur.

SELECT COALESCE(hsplit.requiredfield, hsplit2.requiredfield) AS requiredfield, 
... 
Left Join CMS_ECH.dbo.hsplit hsplit on hsplit.row_date = ANDREWSTABLE.SegStart_Date 
and hsplit.split=ANDREWSTABLE.dispsplit 
and hsplit.starttime = ANDREWSTABLE.Interval 
and hsplit.acd = ANDREWSTABLE.acd1 
Left Join CMS_ECH.dbo.hsplit hsplit2 on hsplit2.row_date = ANDREWSTABLE.SegStart_Date 
and hsplit2.split=ANDREWSTABLE.dispsplit 
and hsplit2.starttime = ANDREWSTABLE.Interval 
and CASE WHEN hsplit2.acd = 1 THEN 4 WHEN hsplit2.acd = 4 THEN 1 WHEN ... END = ANDREWSTABLE.acd1