这是我的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]&lt; = 6 THEN SumOfTotal ELSE 6 * [SumOfQuantity] END as GrossComm
有什么想法吗?
谢谢!
答案 0 :(得分:5)
您无法在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