Ошибка оператора SQL CASE при проверке условий

#mysql #sql #case

#mysql #sql #случай

Вопрос:

Сценарий заключается в том, что у меня есть два столбца, один из которых — количество, а другой — тип. Теперь то, что я пытаюсь сделать, это проверить, является ли тип «rec», затем он принимает все значения из quantity и добавляет их, и если тип «issue», то он получит только те поля, тип которых получает, и добавит их все на основе идентификатора ЭЛЕМЕНТА. SQL-запрос, который я написал, находится здесь:

  SELECT f.`Itemm_ID`,ABS(SUM(f.`Quantity`)) AS recieving, TYPE ,
(CASE 
WHEN f.`Type` = 'issue'
THEN ABS(SUM(f.`Quantity`))
END)
FROM stock_journal AS f
WHERE f.`Itemm_ID`='1'
 

Теперь дело в том, что все работает нормально, кроме оператора CASE, который возвращает null.
Пожалуйста, помогите мне в решении моей проблемы. Спасибо

Комментарии:

1. case выражение.

Ответ №1:

Кажется, вам нужно в

 SELECT f.`Itemm_ID`,
       ABS(SUM(f.`Quantity`)) AS recieving, 
       TYPE,
       ABS(SUM(CASE WHEN f.`Type` = 'issue'
                    THEN f.`Quantity`
                    ELSE 0
                    END))
FROM stock_journal AS f
WHERE f.`Itemm_ID`='1'
 

PS. f.Quantity Может быть отрицательным? Если нет, то ABS() это избыток. Если это возможно, то ABS() , возможно, необходимо обернуть внутреннее f.Quantity , а не целое SUM() .

Вывод PPS. TYPE in формально неверен (противоречит ONLY_FULL_GROUP_BY ), я бы рекомендовал обернуть его ANY_VALUE() .


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

Я имею в виду, что (возможно, я не уверен) вам нужно

 SELECT f.`Itemm_ID`,
       SUM(ABS(f.`Quantity`)) AS recieving, 
       TYPE,
       SUM(CASE WHEN f.`Type` = 'issue'
                THEN ABS(f.`Quantity`)
                ELSE 0
                END)
FROM stock_journal AS f
WHERE f.`Itemm_ID`='1'
 

Комментарии:

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

2. Обновлен @smartF.

3. понял, спасибо.

Ответ №2:

Вы проверили синтаксис для CASE Я думаю, что вам не хватает ELSE части в запросе

Например:-

 SELECT OrderID, Quantity,
CASE
    WHEN Quantity > 30 THEN "The quantity is greater than 30"
    WHEN Quantity = 30 THEN "The quantity is 30"
    ELSE "The quantity is under 30"
END
FROM OrderDetails;
 

проверьте здесь синтаксис