2009-11-03 5 views
1

S'il vous plaît aidez-moi à convertir la déclaration ci-dessous:Comment convertir ma requête CASE WHEN THEN?

CASE 
    WHEN TITLE IS NOT NULL THEN 'A' 
    WHEN LOCAL_TITLE IS NOT NULL THEN 'B' 
    END 
AS COMBINED_TITLE 

à quelque chose comme ceci:

CASE 
    WHEN TITLE IS NOT NULL THEN COMBINED_TITLE=TITLE 
    WHEN LOCAL_TITLE IS NOT NULL THEN COMBINED_TITLE=LOCAL_TITLE 
    END 
AS COMBINED_TITLE 

Thanx à l'avance Greg

Répondre

2

Je ne suis pas sûr de ce que vous voulez dire, mais si vous essayez de définir une variable, vous feriez ceci:

SELECT 
    @CombinedTitle = CASE 
     WHEN Title IS NOT NULL THEN Title 
     WHEN Local_Title IS NOT NULL THEN Local_Title 
    END 
... 

Si vous souhaitez toujours créer colonne Combined_Title mais avec des valeurs des deux colonnes de titre, vous feriez:

SELECT 
    CASE 
     WHEN Title IS NOT NULL THEN Title 
     WHEN Local_Title IS NOT NULL THEN Local_Title 
    END AS Combined_Title 
... 

Voir aussi documentation on COALESCE, il mentionne même qu'il est équivalent à un CASE instruction tout comme le vôtre (avec l'ajout de ELSE NULL.)

+0

thanx Blixt, votre deuxième sélection est ce que je suis après, malheureusement, il ne fonctionne pas dans SQL Server 2005 ... – Fet

+0

Oups! Ça a marché! Merci beaucoup Blixt. – Fet

+0

COALESCE est la voie à suivre. – onedaywhen

2

ISNULL (TITRE, LOCAL_TITLE) AS COMBINED_TITLE

+0

court et au point. J'aime ça. – Jonathan

+1

Méfiez-vous cependant, si les deux TITLE et LOCAL_TITLE sont NULL, cela va définir COMBINED_TITLE à NULL (bien que cela puisse être nécessaire est nécessaire dans ce cas) –

+0

Vous avez raison Tim – Fet

3

Essayez-vous de l'utiliser dans une instruction de mise à jour? Vous pouvez effectivement faire disparaître l'instruction CASE dans ce cas

UPDATE 
    <table> 
SET 
    COMBINED_TITLE = COALESCE(TITLE, LOCAL_TITLE, COMBINED_TITLE) 

COALESCE trouveront la première valeur non NULL dans la liste

+0

+1: 'COALESCE' est probablement ce que Greg veut vraiment. – Blixt

+0

Non Tim, j'en ai besoin pour les reportages, merci beaucoup – Fet

Questions connexes