sql - Access 中的 SWITCH 函数出现操作员错误
问题描述
我一直在尝试SWITCH
在 MS Access 中执行以下功能,但我不断收到以下错误:
查询表达式中的语法错误(缺少运算符)。
我以前用过这个,它工作得很好,但后来我收到了一个错误。
SELECT tempJoin.[cardID], tempJoin.[netSales], tempJoin.[amountRedeemed],
SWITCH (
[netSales] <1000, "0-1000",
[netSales] >=1000 AND <2000, "1000-2000",
[netSales] >=2000 AND <3000, "2000-3000",
[netSales] >=3000 AND <4000, "3000-4000",
[netSales] >=4000 AND <5000, "4000-5000",
[netSales] >=5000 AND <6000, "5000,6000",
[netSales] >=6000 AND <7000, "6000-7000",
[netSales] >=7000 AND <8000, "7000-8000",
[netSales] >=8000 AND <9000, "8000-9000",
[netSales] >=9000 AND <10000, "9000-10000",
[netSales] >=10000, ">10000"
) AS netSalesBin
INTO tempJoin
FROM tempJoin;
解决方案
正如 Olivier 所解释的,出现语法错误是因为第二个比较运算符缺少比较左侧的字段:
[netSales] >= 1000 AND ??? < 2000
^--------------- Missing field
但是请注意,实际上只需要进行一次比较,因此代码可以简化为以下内容:
select
tempjoin.[cardid],
tempjoin.[netsales],
tempjoin.[amountredeemed],
switch (
[netsales] < 1000, "0-1000",
[netsales] < 2000, "1000-2000",
[netsales] < 3000, "2000-3000",
[netsales] < 4000, "3000-4000",
[netsales] < 5000, "4000-5000",
[netsales] < 6000, "5000,6000",
[netsales] < 7000, "6000-7000",
[netsales] < 8000, "7000-8000",
[netsales] < 9000, "8000-9000",
[netsales] < 10000, "9000-10000",
true, ">10000"
) as netsalesbin
into tempjoin
from tempjoin
因为,如果netsales
小于1000
,第一个测试表达式将始终在第二个之前验证,依此类推。
推荐阅读
- php - Authy PHP - You are not passing the user params correctly
- asp.net - 禁用 TLS 1.0 会破坏 ASP.NET 应用程序
- javascript - How to use a material stepper in Angular 5
- ssl - SSL handshake with SNI extension enabled - certificate selection on server
- sas - SAS PROC SQL:如何添加尾随空格?
- nginx - 使用 proxy_protocol 时在 nginx 中阻止 CIDR 范围的更好方法是什么?
- android - 如何使用各种领域数据库?
- puppet - 如果间隔为 24 小时,Puppet 是否会在启动时签入?
- javascript - 无法在javascript中使用前一个元素兄弟增加最后一个元素
- php - PHP 5.3 中的默认 CA 证书位置