Я работаю с базой данных SQLite, в которой есть таблица CarUse с тремя полями CarID (VARCHAR (20)), tDate (VARCHAR (20) и Kms (INT).
Цель состоит в том, чтобы создать таблица, которая будет суммировать Kms за диапазон дат (от D1 до D2), а затем помечать их как «High Kms», если они выше X, и как «Low Kms», если они меньше Y.
Итак, Построив этот шаг за шагом, я легко могу найти общее количество километров для каждой машины в таблице CarUse с помощью команды GROUP BY:
SELECT CarID, SUM(Kms)
FROM CarUse
WHERE tDate > D1 AND tDate < D2
GROUP BY CarID
Теперь, по сути, я хочу создать еще одно поле для добавления к результирующим данным, которые классифицируют SUM (Kms) так, что если SUM (Kms)> X - это «High Kms», а если
Для начала я попытался:
SELECT CarID, SUM(Kms) AS A,
CASE A
WHEN A > X THEN 'High Kms'
WHEN A < Y THEN 'Low Kms'
END
FROM CarUse
WHERE tDate > D1 AND tDate < D2
GROUP BY CarID
Когда я запускаю это, я получаю сообщение об ошибке, в котором говорится, что «такого столбца нет: A.» Сначала я подумал, что псевдоним «A» должен быть назначен после создания результата. В качестве быстрого исправления я надеялся что если вместо использования псевдонима A я просто ссылаюсь на SUM (Kms), то есть
SELECT CarID, SUM(Kms),
CASE SUM(Kms)
WHEN SUM(Kms) > X THEN 'High Kms'
WHEN SUM(Kms) < Y THEN 'Low Kms'
END
FROM CarUse
WHERE tDate > D1 AND tDate < D2
GROUP BY CarID
Это выполняется, но не дает желаемого результата. Фактически, он назначает «Высокие Kms» только тем, у кого SUM (Kms) = 0. Опять здесь я предполагаю, что это связано с тем, что Sum (Kms) неизвестно, когда он работает.
Я решил попробовать другую тактику c и создать 'таблицу SUM' отдельно, а затем выполнить тот же запрос, например
SELECT A.CarID, A.TotalDist,
CASE A.TotalDist
WHEN A.TotalDist > X THEN 'High Kms'
WHEN A.TotalDist < Y THEN 'Low Kms'
END
FROM (
SELECT CarID, SUM(Kms) AS TotalDist
FROM CarUse
WHERE tDate > D1 AND tDate < D2
GROUP BY CarID
) AS A
Это выполняется, но, к сожалению, не сделать желаемое действие. Он назначает «Высокие Kms» только тем, где A.TotalDist = 0.
Может ли кто-нибудь помочь мне точно понять, что происходит с точки зрения компиляции с функциональностью? и возможно ли это
Любой совет будет принята с благодарностью.