8)重新运行同一份报告,并为三家公司提供2014年和2015年的数据。按年份排序,然后在每年内从最高到最低订单数量。
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')
;
当我运行时,我收到错误:
错误:[Oracle] [ODBC] [Ora] ORA-00933:SQL命令未正确结束
答案 0 :(得分:0)
GROUP BY customers.companyname AND to_char(orders.orderdate, 'Y')
^^^ replace with a comma
答案 1 :(得分:0)
正如FuzzyTree所说,用逗号替换AND是起点。
SQL Server没有to_char函数。因为我没有使用ORACLE来调用SQL Server,所以我不确定是否会发生某种形式的转换或者是否会导致错误。如果确实产生错误,您可以使用以下其中一种: -
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 Canonical。见https://msdn.microsoft.com/en-GB/library/ms187928.aspx
我发现CONVERT语句可以胜过YEAR()函数,这有点违反直觉。