2015-04-30 1 views
0

Je travaille depuis quelques jours sur la façon d'accomplir ce qui suit: J'ai une table qui a des adresses alternatives, mais j'ai seulement besoin de tirer la ville. Cependant, la ville peut être dans field5, field4 ou field3. Qu'est-ce que je voudrais faire, et ont échoué lamentablement, est de peupler un autre champ appelé ville avec la valeur trouvée en évaluant les trois champs pour <> NULL.SQL Server 2008R2: évaluation des instructions de cas à trois colonnes ou fusion?

C'est ce que j'ai pour l'instant, bien que je ne reçoive aucune erreur, la seule valeur qui apparaisse est field4, puisque field5 est null ou ''. Mais si field4 est également nul, le champ city est vide. Pour une raison quelconque, ma requête ne regarde pas field3 et s'il y a une valeur, la valeur ne sera pas renseignée. Aidez-moi, s'il vous plaît!

Ceci est la 1ère tentative: cas où altcity = 'Y' et (field5 est nulle ou field5 = ' ') alors field4 autre cas où altcity =' Y' et (field4 est nulle ou field4 = » ') then field3 else field5 fin fin comme ville < - Champ5 ou Champ4 apparaît comme il se doit, mais si les deux champs sont NULL, le champ est vide. On dirait que la requête ne regarde pas field3.

Voici la deuxième tentative:

case when altcity='y' then coalesce(field5,field4,field3) end as city 

Même chose ici, la valeur field5 ou field4 est peuplée, mais la valeur de field3 ne fonctionne pas.

Merci beaucoup pour votre aide!

Répondre

0

un peu long, mais remis quoi ressemble comme suit lorsqu'il est exécuté sur vos données:

CASE 
    WHEN altcity='y' THEN 
         CASE 
          WHEN field5 is not null AND field5 != '' THEN field5 
          WHEN ((field5 is null) OR (field5 = '')) and ((field4 is not null) AND (field4 != '')) then field4 
          WHEN (((field5 is null) OR (field5 = '')) and ((field4 is null) OR (field4 = ''))) and ((field3 is not null) AND (field3 != '')) then field3 
          ELSE '?' 
         END 
    END 

Après avoir vu un exemple de vos données, il est maintenant logique que le COALESCE n'a pas fonctionné comme cela est tributaire sur NULL dans les données. En C# il y a une fonction de chaîne IsNullOrEmpty qui gère ces cas. T-SQL n'a pas ceci mais il y a des exemples comme this qui aident à créer cette fonctionnalité et pourraient ranger l'instruction

+0

Merci @Matt pour la réponse rapide! J'ai couru la suggestion contre mes données et le seul champ qui tire maintenant est field5 et pas n'importe lequel des autres quand field5 est nul. D'autres suggestions? –

+0

Est-ce que field5 est réellement nul ou est-il juste vide (chaîne vide)? – Matt

+0

Field5 peut être à la fois nul ou vide. –