2014-12-01 114 views
0

我正在尝试W3School页面中的简单案例查询。mysql sql case语句为不同条件提供相同的值

http://www.w3schools.com/sql/trysql.asp?filename=trysql_select_groupby_2

当我运行下面的查询,我不断收到的所有范围值“过度”。它应该显示“下”的价格低于500

SELECT 
(o.Quantity* p.Price) as price, 
case price when price< 500 
      then 'under' 
      else 'over' 
      end as range 
FROM OrderDetails o 
inner join Products p 
on (o.ProductID = p.ProductID) 
+0

我想查询可以被解释“价格”,如表中的价格,而不是计算的字段。尝试使名称不同。 – asantaballa 2014-12-01 18:06:31

回答

1

AS在产品表中存在price列,它使用的是价值

不能引用列别名price在相同的SELECT语句,你需要重复price计算

而且你混合2种情况下表达的

你有

case price when price <500 

你应该使用

case when (o.Quantity* p.Price) < 500 
+0

我根据建议更新了查询。当(o.Quantity * p.Price)<500 then'under' else'over'时,如果price_val为 (o.Quantity * p.Price),则返回相同的结果SELECT (o.Quantity * p.Price) 以范围结束 FROM OrderDetails 内部加入产品p on(o.ProductID = p.ProductID) – vikrampandit993 2014-12-01 18:21:45

+0

确定这是正确的,这里是最终查询。谢谢! SELECT (o.Quantity * p.Price)作为price_val, 情况下,当(o.Quantity * p.Price)<500 然后 '下' 别的 '超过' 端作为范围 FROM订单明细ö 内部联接产品(o.ProductID = p.ProductID) – vikrampandit993 2014-12-01 18:24:40

+0

去除case和when之间的计算,case和case之间没有表达式,只有在when – radar 2014-12-01 18:25:03