【问题标题】:Use BETWEEN in Switch Statement在 Switch 语句中使用 BETWEEN
【发布时间】:2021-12-08 05:49:36
【问题描述】:

尝试自定义GROUP BY Range

我构建了以下 SQL 查询:

SELECT TheTmp, SUM(TheTmp*0.33)
FROM MyTable
WHERE Name = 'TestName1'
GROUP BY SWITCH(TheTmp BETWEEN 0 AND 5,0,50,true)

但它会抛出一个错误:

您的查询不包含指定表达式“TheTmp”作为聚合函数的一部分。

'TheTmp' 是正确的字段,因为以下查询有效:

Select TheTmp, SUM(TheTmp*0.33)
FROM MyTable
WHERE Name = 'TestName1'
GROUP BY TheTmp

所以我认为我在SWITCH() 中使用了BETWEEN

对于下表:

Name        TheTmp
TestName1   8.76669265399322
TestName2   0.273812785388691
TestName1   1
TestName1   1.58938597048424

我的目标是得到下面的输出(将 0 和 5 之间的值相加)

TestName1   8.766*0.33
TestName1   (1.58938597048424*0.33)+(1*0.33)

如何使用BETWEEN 转换为SWITCH

SWITCH(TheTmp BETWEEN 0 AND 5,0,50,true)

【问题讨论】:

  • 在询问 SQL 相关问题时,minimal reproducible example 是一个很好的开始。
  • 如何做一个 sql 可重现的例子?它不是 HTML/JS 吗?
  • 编辑时,在适当的列中输入数据,突出显示并单击{}
  • @jarlh 我已编辑,希望更清楚!
  • @KenWhite:CASE 是 T-SQL;在 Access SQL 中无效。

标签: sql ms-access


【解决方案1】:

Between .. AndSQL 语法。在Switch 中使用 VBA 语法:

TheTmp >= 0 And TheTmp <= 5

【讨论】:

  • Switch 仍然不是聚合函数,不能在 GROUP BY 中使用。
【解决方案2】:

试试这个:

SELECT Name, Sum(0.33*[TheTmp]) AS Amount
FROM MyTable
GROUP BY Name, IIf([TheTmp]>=0 And [TheTmp]<=5,"Group1","Group2")
HAVING (((Name)="TestName1"));

结果如下:

这是您的第二个请求:

SELECT IIf([TheTmp]>=0 And [TheTmp]<=5,"Group1","Group2") AS Grouping, Sum(0.33*[TheTmp]) AS Amount
FROM MyTable
GROUP BY IIf([TheTmp]>=0 And [TheTmp]<=5,"Group1","Group2"), Name
HAVING ((([Name])="TestName1"));

这里是请求号 3:

SELECT IIf([TheTmp]>=0 And [TheTmp]<=5,"Group1","Group2") AS Grouping, Sum(0.33*[TheTmp]) AS Amount
FROM MyTable
GROUP BY IIf([TheTmp]>=0 And [TheTmp]<=5,"Group1","Group2"), Name
HAVING ((([Name])="TestName1"))
ORDER BY IIf([TheTmp]>=0 And [TheTmp]<=5,"Group1","Group2") DESC;

【讨论】:

  • @KenWhite 我试过了,这确实有效。
  • 我没有使用SWITCH,它确实有效。在这里,我将发布结果图片。
  • 是否可以显示 "GROUP1","Group2" 而不是 Name
  • 是的。让我修改一下我的答案。
  • 最后一个问题,如果您想首先显示“Group2”,您将如何订购。 ORDER BY 有效吗?
猜你喜欢
  • 2016-03-16
  • 1970-01-01
  • 1970-01-01
  • 2015-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-20
  • 1970-01-01
相关资源
最近更新 更多