SQL帮助编码多年

SQL帮助编码多年,sql,oracle,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 = orde

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


正如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) ;

120表示ODBC规范。看


我发现CONVERT语句的性能优于YEAR()函数,这有点违反直觉。

正如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) ;

120表示ODBC规范。看


我发现CONVERT语句的性能优于YEAR()函数,这有点违反直觉。

您使用的是什么DBMS?我通过Oracle使用SQL。如果您使用的是像SQLDeveloper这样的GUI工具,它们还会提到一行错误,这将有助于识别问题。错误:[Oracle][ODBC][Ora]ORA-00933:SQL命令没有正确结束我绝对不擅长SQL,所以我不知道如何诚实地解决这个问题。我需要的订单数量为三个不同的公司分开的一年。请不要使用和或在同一水平。使用()。另外,不要依赖日期/字符串的隐式数据类型转换。请不要将group by与and一起使用。您使用的是什么数据库管理系统?我通过Oracle使用SQL。如果您使用的是像SQLDeveloper这样的GUI工具,它们还会提到一行错误,这将有助于确定问题。错误:[Oracle][ODBC][Ora]ORA-00933:SQL命令没有正确结束我绝对不擅长SQL,所以我不知道如何诚实地解决这个问题。我需要的订单数量为三个不同的公司分开的一年。请不要使用和或在同一水平。使用()。另外,不要依赖日期/字符串的隐式数据类型转换。请不要将group by与和一起使用。
GROUP BY customers.companyname ,  CONVERT(CHAR(4),orders.orderdate,120) 
ORDER BY count(orders.orderid) DESC, CONVERT(CHAR(4),orders.orderdate,120);