多年的SQL帮助编码

时间:2017-02-20 20:33:39

标签: sql oracle

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命令未正确结束

2 个答案:

答案 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()函数,这有点违反直觉。

相关问题