2016-03-15 4 views
0

я следующее решениеКак обновить первый ненулевой столбец каждой строки?

Select Col1 = Case when Col1 is null then 'update' 
        else Col1 
     ,Col2 = Case when Col1 is null then Col2 
        when Col2 is null then 'update' 
        else Col2 
     ,Col3 = Case when Col2 is null then Col3 
        when Col3 is null then 'update' 
        else Col3 
     .... and so on 

Просто интересно, если кто имеет лучшее решение.

ответ

1

Неверное ваше решение.

SQL не работает таким образом, вы должны проверить все предшествующие столбцы.

(А ты забыл ENDs для CASEs)

DECLARE @T TABLE(
    col1 sysname NULL 
    ,col2 sysname NULL 
    ,col3 sysname NULL 
) 

INSERT INTO @T 
SELECT NULL, 'N', NULL 

-- Incorrect 
Select Col1 = Case when Col1 is null then 'update' 
        else Col1 
       END 
     ,Col2 = Case when Col1 is null then Col2 
        when Col2 is null then 'update' 
        else Col2 
       END  

     ,Col3 = Case when Col2 is null then Col3 
        when Col3 is null then 'update' 
        else Col3 
       END 
    FROM @T 

-- Dull, but correct     
SELECT 
    Col1 = ISNULL(Col1, 'update') 
    ,col2 = CASE  
       WHEN Col1 IS NOT NULL 
         AND Col2 IS NULL 
        THEN 'update' 
       ELSE Col2 
      END  
    ,col3 = CASE  
       WHEN Col1 IS NOT NULL 
         AND Col2 IS NOT NULL 
         AND Col3 IS NULL 
        THEN 'update' 
       ELSE Col3 
      END 
    FROM @T     
+0

Я просто дает представление о том, что мое решение не смотря на наличие синтаксических ошибок. – imsudhni

+0

Я ответил вам не на ваши синтаксические ошибки. Ваша идея неверна: NULL, NOT NULL, NULL станет «обновленным», NOT NULL, «обновлено». – Ingaz

Смежные вопросы