CASE не работает и показывает значения NULL при выполнении запроса - PullRequest
0 голосов
/ 29 мая 2018

Я получаю все NULL значения в столбце.У меня есть некоторые данные в таблице species_data, такие как

| ID |     science_name_short    |database_value   |
|  1 | Rhododendron phipli       |3                |
|  2 | Rhododendron felica       |5                |
|3   | Rhododendron deron        |5                | 
|4   | Rhododendron  sednuns     |5                |

Я попытался вывести вывод как

| ID |       NAME                |Number|
|  1 | Rhododendron Species      |18    |

SQL, который я пробовал,

Select sum(database_value)
 CASE when science_name_short='rhodo'
 THEN 'Rhododendron species'
END AS real_name
from species_data;

Ответы [ 3 ]

0 голосов
/ 29 мая 2018

Вы можете использовать следующий запрос, используя LOCATE:

SELECT 
    MIN(ID) AS ID,
    CASE WHEN LOCATE('Rhodo', science_name_short) = 1 THEN 'Rhododendron species' ELSE science_name_short END AS 'NAME',
    SUM(database_value) AS 'Number' 
FROM species_data
GROUP BY CASE WHEN LOCATE('Rhodo', science_name_short) = 1 THEN 'Rhododendron species' ELSE science_name_short END

Вы также можете использовать решение, используя LTRIM иLEFT:

SELECT
    MIN(ID) AS ID,
    CASE WHEN LEFT(LTRIM(science_name_short), 5) = 'Rhodo' THEN 'Rhododendron species' ELSE science_name_short END AS 'NAME',
    SUM(database_value) AS 'Number'
FROM species_data
GROUP BY CASE WHEN LEFT(LTRIM(science_name_short), 5) = 'Rhodo' THEN 'Rhododendron species' ELSE science_name_short END

демо: http://sqlfiddle.com/#!9/7ad33a/5/1

0 голосов
/ 29 мая 2018

Как я уже упоминал в комментариях, вы должны расширить свою модель данных категориями.В противном случае вы никогда не узнаете, что азалия - это рододендрон, потому что ее имя просто не начинается с «рододендрона».

С вашей датамоделью, как есть, если вы хотите суммировать все растения, начинающиеся с «Рододендрона»', самый простой подход:

select 'Rhododendron species' as name, sum(database_value) as num
from species_data
where science_name_short like 'Rhododendron%';
0 голосов
/ 29 мая 2018

Используйте like из substr(), если возможно

Select database_value
CASE when 
upper(science_name_short) like upper('%rhodo%') THEN 'Rhododendron species'
END AS real_name
from species_data;

Если вы хотите использовать агрегатные функции, такие как sum(), для любого столбца, используйте его с group by.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...