2013-10-10 3 views
0

У меня есть результирующий набор, состоящий в основном из столбцов значений. Однако в самом левом столбце содержится текст, который я использую для эффективной маркировки каждой строки. Когда я ROLLUP, значения total, что отлично. Текст в столбце «Нет KS2» обновляется до NULL, который ожидается. Есть ли что-нибудь, что я могу сделать, чтобы заменить NULL текстом, например «Total»?SQL Возможно ли заменить значения в накопителе?

Все NULL в других столбцах должны быть там, и мне не нужно их заменять.

Вот пример моих результатов установить например:

No KS2 6c/D- 6b/D  6a/D+ 
2a  1  NULL  NULL  
3c  3  NULL  NULL  
3b  NULL  5  NULL 
3a  NULL  NULL  6 
NULL  4  5  6 

Вот что я хотел бы сделать:

No KS2 6c/D- 6b/D  6a/D+ 
2a  1  NULL  NULL  
3c  3  NULL  NULL  
3b  NULL  5  NULL 
3a  NULL  NULL  6 
Total  4  5  6 

EDIT:

При создании результатов KS2 столбцов устанавливается с помощью группу я уже заменил значения NULL на «Нет KS2». Пожалуйста, смотрите мой GROUP BY код ниже:

GROUP BY 
     CASE Name 
      WHEN 'English' THEN 
       CASE WHEN [Ks2en] IS NULL OR [Ks2en]='' THEN 
        'No KS2' 
       WHEN [Ks2en] IN ('1a','1b','1c') THEN 
        '1' 
       ELSE 
        [Ks2en] 
       END 
      WHEN 'Mathematics' THEN 
       CASE WHEN [Ks2ma] IS NULL OR [Ks2ma]='' THEN 
        'No KS2' 
       WHEN [Ks2ma] IN ('1a','1b','1c') THEN 
        '1' 
       ELSE 
        [Ks2ma] 
       END 
      ELSE 
       CASE WHEN [Ks2av] IS NULL OR [Ks2av]='' THEN 
        'No KS2' 
       WHEN [Ks2av] IN ('1a','1b','1c') THEN 
        '1' 
       ELSE 
        [Ks2av] 
       END 
      END 
      WITH ROLLUP 

EDIT: Это не дубликат, как решение вопроса, что это должно быть дубликатом не решить мою проблему. Я отредактировал код, чтобы объяснить разницу. У меня уже есть оператор case, который заменяет мои значения NULL в столбце KS2 «Нет KS2».

+0

Да, вдоль правильных линий. Однако у меня уже есть аргумент case, который заменяет мои значения NULL в столбце KS2 «Нет KS2». Я выложу свой код GROUP BY. – Matt

+0

Закрепите всю партию в скобках и создайте оператор select, который заменяет NULL. выберите * FROM (<ваш полный запрос>) данные – twoleggedhorse

+0

Относительно вашего редактирования. Это ** ** является дубликатом. Правильный способ замены значений «ROLLUP» заключается в использовании функции «GROUPING». Использование 'ISNULL' или' COALESCE' неправильно применяет общую метку к группам, где значение группировки равно «NULL». Поскольку вы не потрудились поставлять SQL Fiddle, я не буду утруждать себя тем, как применять «GROUPING» к вашей ситуации (код слишком длинный для комментария, и я, конечно, не заинтересован в создании скрипки с нуля) –

ответ

0

Как оказалось, это было просто. Пользователь, который отправил комментарий о расследовании COALESCE(), а затем удалил его, отправил меня на правильный путь. Я завернул оператор case для столбца в функции, и мой набор результатов отображает именно то, как я этого хотел. Так что спасибо, кто бы вы ни были.

SELECT 
     COALESCE(CASE Name 
      WHEN 'English' THEN 
       CASE WHEN     
       [Ks2en] IS NULL OR [Ks2en]='' THEN 
        'No KS2' 
       WHEN [Ks2en] IN ('1a','1b','1c') THEN 
        '1' 
       ELSE 
        [Ks2en] 
       END 
      WHEN 'Mathematics' THEN 
       CASE WHEN [Ks2ma] IS NULL OR [Ks2ma]='' THEN 
        'No KS2' 
       WHEN [Ks2ma] IN ('1a','1b','1c') THEN 
        '1' 
       ELSE 
        [Ks2ma] 
       END 
      ELSE 
       CASE WHEN [Ks2av] IS NULL OR [Ks2av]='' THEN 
        'No KS2' 
       WHEN [Ks2av] IN ('1a','1b','1c') THEN 
        '1' 
       ELSE 
        [Ks2av] 
       END 
      END,'Total') AS KS2,... 
Смежные вопросы