嗨,我有框架这个查询,我遇到了一个错误
像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
答案 0 :(得分:0)
错误信息不是我认为应该是的。
你的mysql版本是什么?
1)您应该为子查询提供别名 2)另一个问题是,您在外部查询中选择了“product_line”,但在子查询中选择了product_line作为“StringFact”,这就是为什么outer_query将无法选择product_line。
我按如下方式更改了您的查询,并且执行时没有任何问题。
以下是您的查询http://www.sqlfiddle.com/#!2/26218/6
的sqlfiddleSELECT 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