2013-08-19 2 views
0

привет, у меня есть кадр этого запроса, и я столкнулся с ошибкой вроде this.i пробовал много, но результата нет. I изменил запрос, а затем показал еще одну ошибку.
Не удалось подготовить следующий запрос:
Ошибка при подготовке оператора SQL.
Я получаю ошибку в запросе mysql?

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 
+3

Сообщение об ошибке не то, что я думаю, что это должно быть, но если я не ошибаюсь, MySQL требует, чтобы каждый вложенный запрос псевдонимом. Итак, можете ли вы поместить псевдоним в подзапрос и повторить попытку? – Bren

+0

Я попытался снова показать его только ту же ошибку ... есть ли способ сделать это .. – jagan4040

+0

Я думаю, что «% Y-% m% -01» должно быть «% Y-% m-01», нет % m%, [Ссылка] (http://www.w3schools.com/sql/func_date_format.asp) –

ответ

0

Сообщение об ошибке не то, что я думаю, что это должно быть.

Какая у вас версия mysql?

1) Вы должны указать псевдоним для подзапроса 2) Еще одна проблема заключается в том, что вы выбрали «product_line» во внешнем запросе, но product_line выбирается как «StringFact» в подзапросе, поэтому внешняя_запись не будет быть в состоянии выбрать product_line.

Я изменил ваш запрос следующим образом, и он выполняется без проблем.

Вот sqlfiddle для запроса http://www.sqlfiddle.com/#!2/26218/6

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 
Смежные вопросы