Попытка увеличить значения следующих столбцов с помощью операторов case

Это код, который я написал, но когда я выполняю его неправильную синтаксическую ошибку, могу ли я узнать, какую ошибку я сделал, спасибо

SELECT CASE
   WHEN RATING = 'VERY_POOR' THEN 1 ELSE 0
   END 'VERYPOOR',
   WHEN RATING = 'POOR' THEN 1 ELSE 0
   END 'POOR',
   WHEN RATING = 'AVERAGE' THEN 1 ELSE 0
   END 'AVERAGE',
   WHEN RATING = 'GOOD' THEN 1 ELSE 0
   END 'GOOD',
   WHEN RATING = 'VERY_GOOD' THEN 1 ELSE 0
   END 'VERYGOOD'
+--------------+-----------+------+---------+------+-----------+-------------+--------------------+----------------+-----------+
| RESPONSEDATE | VERY_POOR | POOR | AVERAGE | GOOD | VERY_GOOD | CSAT_RATING | CATEGORY_WEIGHTAGE | CATEGORYNAME   | CSATSCORE |
+--------------+-----------+------+---------+------+-----------+-------------+--------------------+----------------+-----------+
| 2018-04-03   |         0 |    0 |       1 |    0 |         0 |           3 |                  0 | Overall Rating |         3 |
| 2018-04-03   |         0 |    0 |       0 |   32 |         0 |           4 |                  0 | Overall Rating |         4 |
| 2018-04-03   |         0 |    0 |       0 |    0 |        28 |           5 |                  0 | Overall Rating |         5 |
| 2018-04-04   |         0 |    0 |       6 |    0 |         0 |           3 |                  0 | Overall Rating |         3 |
| 2018-04-04   |         0 |    0 |       0 |   44 |         0 |           4 |                  0 | Overall Rating |         4 |
| 2018-04-04   |         0 |    0 |       0 |    0 |        32 |           5 |                  0 | Overall Rating |         5 |
| 2018-04-05   |         0 |    0 |       2 |    0 |         0 |           3 |                  0 | Overall Rating |         3 |
| 2018-04-05   |         0 |    0 |       0 |   14 |         0 |           4 |                  0 | Overall Rating |         4 |
| 2018-04-05   |         0 |    0 |       0 |    0 |        11 |           5 |                  0 | Overall Rating |         5 |
+--------------+-----------+------+---------+------+-----------+-------------+--------------------+----------------+----------

Что вы пытаетесь достичь? Можете ли вы включить образцы данных и ожидаемый результат? Что за синтаксическая ошибка? В конечном итоге вы неправильно вкладываете свои операторы CASE, но трудно определить, каково ожидаемое поведение.

kchason 11.04.2018 12:38

+ является арифметическим оператором и здесь неуместен. Я не понимаю, что вы пытаетесь сделать, можете ли вы проиллюстрировать это, добавив образцы данных и ожидаемый результат в виде текста к вопросу.

P.Salmon 11.04.2018 12:39

Предоставьте нам образец набора данных и результат образца

Md. Mahmud Hasan 11.04.2018 13:13

Не обращайте внимания на столбец RESPONSEDATE здесь

Sooraj V 11.04.2018 13:17

@kchason Спасибо, синтаксическая ошибка заключалась в том, что я не привязывал операторы case.

Sooraj V 11.04.2018 13:42

Вы обогатили свой вопрос, но, к сожалению, бесполезным образом.

P.Salmon 11.04.2018 14:32
1
6
71
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Синтаксис CASE должен быть таким:

CASE 
    WHEN Condition1 THEN Value1
    WHEN Condition2 THEN Value2
    ELSE Value3
END

Если вам нужно написать несколько CASE, вам нужно повторить всю структуру (с другим псевдонимом столбца, если хотите).

SELECT

    CASE 
        WHEN Condition1 THEN Value1
        WHEN Condition2 THEN Value2
        ELSE Value3
    END 'FirstCase',

    CASE 
        WHEN Condition1 THEN Value1
        WHEN Condition2 THEN Value2
        ELSE Value3
    END 'SecondCase',

    CASE 
        WHEN Condition1 THEN Value1
        WHEN Condition2 THEN Value2
        ELSE Value3
    END 'ThirdCase'

FROM
    YourTable 

Ваша проблема в том, что вам не хватает ключевого слова «CASE» после вашего первого CASE.

SELECT 
    CASE WHEN RATING = 'VERY_POOR' THEN 1 ELSE 0 END 'VERYPOOR',
    CASE WHEN RATING = 'POOR' THEN 1 ELSE 0 END 'POOR',
    CASE WHEN RATING = 'AVERAGE' THEN 1 ELSE 0 END 'AVERAGE',
    CASE WHEN RATING = 'GOOD' THEN 1 ELSE 0 END 'GOOD',
    CASE WHEN RATING = 'VERY_GOOD' THEN 1 ELSE 0 END 'VERYGOOD'

-- FROM ....

Другие вопросы по теме