【问题标题】:Help with SQL CASE Statement in SELECT Query帮助 SELECT 查询中的 SQL CASE 语句
【发布时间】:2011-11-01 09:07:05
【问题描述】:

这是我的 SQL 语句:

SELECT [Item], SUM([Quantity]) AS SumOfQuantity, SUM([Price Each]) AS SumOfTotal,
([SumOfTotal] / [SumOfQuantity]) As Average,
CASE 
WHEN [Average] <= 6 THEN SumOfTotal
ELSE 6*[SumOfQuantity] END AS GrossComm
FROM Data
GROUP BY [Item];

当我尝试执行此查询时,我收到错误消息:

查询表达式中的语法错误(缺少运算符)'CASE WHEN [Average]

有什么想法吗?

谢谢!

【问题讨论】:

  • 您使用的是什么数据库 (RDBMS)?
  • 哪个 RDBMS? MySQL、SQL Server、Oracle...
  • 您不能在同一个选择中引用别名列。

标签: sql


【解决方案1】:

您不能在CASE 语句中按名称引用派生字段。使用公式代替[average]

您实际上可能有一个更大的问题,因为您的所有字段都基于其他派生字段,因此您可能需要多次为每个字段写出公式。

CASE 掩盖的其他字段可能也存在问题。基本上不要按名称引用同一查询中的计算/别名字段,因为它不起作用。

如果这是 SQL Server,您可以使用 CTE 解决方法:

;WITH CTE AS
(
SELECT [Item], SUM([Quantity]) AS SumOfQuantity, SUM([Price Each]) AS SumOfTotal,
FROM Data
GROUP BY [Item]
)
SELECT *, ([SumOfTotal] / [SumOfQuantity]) As Average,
CASE 
WHEN  ([SumOfTotal] / [SumOfQuantity]) <= 6 THEN SumOfTotal
ELSE 6*[SumOfQuantity] END AS GrossComm
FROM CTE

【讨论】:

  • 嗯...您通过在同一个 SELECT 语句中引用计算列 (Average) 来重复 OP 的错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-05
  • 1970-01-01
  • 1970-01-01
  • 2015-02-27
  • 1970-01-01
相关资源
最近更新 更多