#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;
проверьте здесь синтаксис