2014-09-29 102 views
0

我试图做一个SQL调用,避免小计$ 0的订单。我无法让它忽略小计0.00的订单。SQL不等于0.00十进制值

我的SQL调用:

SELECT Orders_Products.productID, 
     Orders_Products.QtyOrdered, 
     Orders.DateCreated, 
     Orders_Products.Subtotal, 
     SUM(Orders_Products.Subtotal) as Revenue 
FROM `Orders_Products` 
INNER JOIN Orders 
ON Orders_Products.OrderID = Orders.OrderID 
WHERE ProductID <= 21 
    AND ProductID >= 19 
    OR ProductID = 41 
    AND Orders_Products.Subtotal <> 0.00 
    AND MONTH(Orders.DateCreated) = MONTH(CURDATE()) 
    AND Year(Orders.DateCreated) = YEAR(CURDATE()) 
GROUP BY DateCreated 
ORDER BY `Orders`.`DateCreated` DESC 

这是我遇到的问题(仍显示订单小计0.00):

AND Orders_Products.Subtotal <> 0.00 

我也试过

AND Orders_Products.Subtotal != 0.00 
AND Orders_Products.Subtotal <> 0 
AND Orders_Products.Subtotal <> "0.00" 

但是,我的产出仍包含小计0.00的订单项:

enter image description here

+2

什么是Orders_Products.Subtotal列的类型? – Anton 2014-09-29 18:06:42

+0

它是十进制的(12,2) – CaitlinHavener 2014-09-29 18:08:55

+0

2件事 - 有一个条款用于聚合的where子句。第二个 - 这个查询在任何数据库上都会失败,但是MySQL ...你需要按select子句中所有不属于聚合的列进行分组。 MySQL喜欢做错误的事情...可能性是这个查询没有做你认为的事情。 – Twelfth 2014-09-29 18:26:41

回答

3

我想方括号有问题。 它看起来应该收集为一个条件:

(ProductID <= 21 AND ProductID >= 19 OR ProductID = 41) 
+0

你是对的,这是一个问题,但这不是他的问题的答案 – Twelfth 2014-09-29 18:28:42

+0

@Telfelf为什么它不是答案?在她的sql查询问题结果与productId = 21和小计= 0.00是正确的。所以在条件顺序上存在问题。 – Anton 2014-09-29 18:32:40

+0

小计<> 0和sum(小计)<> 0之间有区别,它将省略小计<> 0的单行,但总计(小计)<> 0仍然存在。这个小组无法按她的意图行事。 – Twelfth 2014-09-29 18:48:12