[我正在使用具有表CarUse的SQLite数据库,该表具有三个字段CarID(VARCHAR(20)),tDate(VARCHAR(20)和Kms(INT)。
目标是创建一个表,该表将汇总日期范围(D1至D2)中的Kms,如果它们在X之上,则将它们标记为'High Kms';如果在Y之下,则将其标记为'Low Kms'。 >
因此,逐步构建此步骤,我可以使用GROUP BY命令在CarUse表中轻松找到每辆车的总Kms:
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)在运行时未知。
我决定尝试不同的策略并分别创建'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
这会执行,但可惜没有执行所需的操作。它仅向A.TotalDist = 0的那些分配“ High Kms”。
有人可以帮我确切地了解在编译为功能方面发生了什么吗?以及是否可行
任何建议将不胜感激。
我正在使用具有表CarUse的SQLite数据库,该表具有三个字段CarID(VARCHAR(20)),tDate(VARCHAR(20)和Kms(INT)。目标是创建一个表来汇总Kms以上...
由于您的case
,应该是这样的:
CASE
WHEN A.TotalDist > 50 THEN 'High Kms'
WHEN A.TotalDist < 10 THEN 'Low Kms'
END