2017-02-20 4 views
1

8)同じレポートを再実行し、3社ごとに2014年と2015年の数値を返します。年ごとに注文し、次に各年の最高注文数から最低注文数を注文します。SQL Help-Coding for Years

SELECT count(orders.orderid) 
,  customers.companyname 
,  to_char(orders.orderdate, 'Y') as Year 
FROM northwinds.orders 
JOIN northwinds.customers 
ON  customers.customerid = orders.customerid 
JOIN northwinds.orderdetails 
ON  orderdetails.orderid = orders.orderid 
WHERE orders.orderdate between '1-JAN-14' and '31-DEC-15' 
AND customers.companyname = 'Rattlesnake Canyon Grocery' 
OR  customers.companyname= 'Around the Horn' 
OR  customers.companyname='Island Trading' 
GROUP 
BY  customers.companyname 
AND to_char(orders.orderdate, 'Y') 
ORDER 
BY  count(orders.orderid) DESC 
,  to_char(orders.orderdate, 'Y') 
; 

私はこれを実行すると、私はエラーが表示さ:FuzzyTreeはコンマでANDを交換して出発点で述べたように

Error: [Oracle][ODBC][Ora]ORA-00933: SQL command not properly ended

+0

どのDBMSをお使いですか? – Zi0n1

+0

私はOracleを通じてSQLを使用しています。 – Marisa

+0

SQLDeveloperのようなGUIツールを使用している場合、問題の特定に役立つエラーの行番号も記載されています。 – Maverick

答えて

0
GROUP BY customers.companyname AND to_char(orders.orderdate, 'Y') 
           ^^^ replace with a comma 
0

を。

SQL Serverには、to_char関数がありません。 SQL Serverを呼び出すためにORACLEを使用していないので、何らかの形式の変換が行われるかどうか、またはこれによってエラーが発生するかどうかはわかりません。それはあなたの代わりに、次のいずれかを使用することができ、エラーを生成しない場合: -

GROUP BY customers.companyname , YEAR(orders.orderdate) 
ORDER BY count(orders.orderid) DESC, YEAR(orders.orderdate) ; 

または

GROUP BY customers.companyname , CONVERT(CHAR(4),orders.orderdate,120) 
ORDER BY count(orders.orderid) DESC, CONVERT(CHAR(4),orders.orderdate,120); 

を120は、ODBC標準を意味します。 https://msdn.microsoft.com/en-GB/library/ms187928.aspx

CONVERT文がYEAR()関数よりも優れていることがわかりましたが、やや直感的です。