SQL帮助编码多年
8) 重新运行同一份报告,给我这三家公司2014年和2015年的数字。按年订购,然后在每年内从最高到最低订购数量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
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);