在SELECT Query中帮助SQL CASE语句

时间:2011-08-22 18:19:59

标签: sql

这是我的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

有什么想法吗?

谢谢!

1 个答案:

答案 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