我在mysql查询中收到错误?

时间:2013-08-19 08:02:17

标签: mysql

嗨,我有框架这个查询,我遇到了一个错误 像this.i尝试过很多但没有结果。我已经修改了查询然后显示另一个错误。    
      无法准备以下查询    
    准备SQL语句时出错。     

SQL error #1:Syntax error: Encountered "MONTH" at line 4, column 46.





SELECT distinct productline as StringFact,orderdate,
SUM(CASE WHEN DATE(orderdate) between 
(DATE_FORMAT(DATE_ADD(orderdate,INTERVAL -12 MONTH),'%Y-m%-01'))
AND (DATE_FORMAT(DATE_ADD(orderdate,INTERVAL -11 MONTH),'%Y-m%-01')) THEN BUY END)          AS      PREVYEAR,

SUM(CASE WHEN DATE(orderdate) between 
 (DATE_FORMAT(DATE_ADD(CURDATE(),INTERVAL 0 MONTH),'%Y-m%-01'))
 AND (DATE_FORMAT(DATE_ADD(orderdate,INTERVAL 0 MONTH),'%Y-m%-01')) THEN BUY END) AS        CURRENTMONTH,

SUM(CASE WHEN DATE(orderdate) between 
(DATE_FORMAT(DATE_ADD(CURDATE(),INTERVAL -1 MONTH),'%Y-m%-01'))
AND (DATE_FORMAT(DATE_ADD(orderdate,INTERVAL -1 MONTH),'%Y-m%-01')) THEN BUY END) AS    LASTMONTH

  from (select orderdate,productline as StringFact,
  sum(QUANTITYINSTOCK + BUYPRICE) as BUY,
  sum(QUANTITYORDERED * PRICEEACH) as MSRP

   from customers, orders, orderdetails, products
  where customers.customernumber = orders.customernumber
   and orders.ordernumber = orderdetails.ordernumber
  and orderdetails.productcode = products.productcode
  Group By productline,orderdate
 )
 Group By productline,orderdate

1 个答案:

答案 0 :(得分:0)

错误信息不是我认为应该是的。

你的mysql版本是什么?

1)您应该为子查询提供别名 2)另一个问题是,您在外部查询中选择了“product_line”,但在子查询中选择了product_line作为“StringFact”,这就是为什么outer_query将无法选择product_line。

我按如下方式更改了您的查询,并且执行时没有任何问题。

以下是您的查询http://www.sqlfiddle.com/#!2/26218/6

的sqlfiddle
SELECT distinct productline as StringFact,orderdate,
SUM(CASE WHEN DATE(orderdate) between 
(DATE_FORMAT(DATE_ADD(orderdate,INTERVAL -12 MONTH),'%Y-m%-01'))
AND (DATE_FORMAT(DATE_ADD(orderdate,INTERVAL -11 MONTH),'%Y-m%-01')) THEN BUY END)              AS      PREVYEAR,

SUM(CASE WHEN DATE(orderdate) between 
 (DATE_FORMAT(DATE_ADD(CURDATE(),INTERVAL 0 MONTH),'%Y-m%-01'))
 AND (DATE_FORMAT(DATE_ADD(orderdate,INTERVAL 0 MONTH),'%Y-m%-01')) THEN BUY END) AS            CURRENTMONTH,

SUM(CASE WHEN DATE(orderdate) between 
(DATE_FORMAT(DATE_ADD(CURDATE(),INTERVAL -1 MONTH),'%Y-m%-01'))
AND (DATE_FORMAT(DATE_ADD(orderdate,INTERVAL -1 MONTH),'%Y-m%-01')) THEN BUY END) AS    LASTMONTH

  from (select orderdate,productline , # removed as StringFact
  sum(QUANTITYINSTOCK + BUYPRICE) as BUY,
  sum(QUANTITYORDERED * PRICEEACH) as MSRP

   from customers, orders, orderdetails, products
  where customers.customernumber = orders.customernumber
   and orders.ordernumber = orderdetails.ordernumber
  and orderdetails.productcode = products.productcode
  Group By productline,orderdate
 ) t # You need to give an alias
 Group By productline,orderdate