Непосредственная проблема заключается в том, что ROW
является a reserved word. Если вы измените этот псевдоним столбца на другое, ошибка исчезнет.
Но вы, вероятно, хотите подзапрос, чтобы получить количество для каждого имени учетной записи, а затем применить аналитическую функцию к результату, что - без пункта PARTITION BY
, который бы ранжировать все то же самое:
SELECT account_name, ordered_items,
ROW_NUMBER() OVER (
ORDER BY ordered_items DESC
) rn
FROM (
SELECT hca.account_name,
count(ordered_item) ordered_items
FROM oe_order_headers_all ooh
JOIN oe_order_lines_all ool
ON ooh.sys_document_ref = ool.sys_document_ref
JOIN cust_accounts_all hca
ON hca.cust_account_id = ooh.org_id
WHERE to_date(ooh.creation_date) BETWEEN DATE '2015-10-01' AND DATE '2015-10-31'
AND ooh.flow_status_code <> 'CANCELLED'
GROUP BY hca.account_name
)
ORDER BY rn DESC;
И если вы хотите только один с наибольшим кол вы можете иметь дополнительный уровень:
SELECT account_name, ordered_items
FROM (
SELECT account_name, ordered_items,
ROW_NUMBER() OVER (
ORDER BY ordered_items DESC
) rn
FROM (
SELECT hca.account_name,
count(ordered_item) ordered_items
FROM oe_order_headers_all ooh
JOIN oe_order_lines_all ool
ON ooh.sys_document_ref = ool.sys_document_ref
JOIN cust_accounts_all hca
ON hca.cust_account_id = ooh.org_id
WHERE to_date(ooh.creation_date) BETWEEN DATE '2015-10-01' AND DATE '2015-10-31'
AND ooh.flow_status_code <> 'CANCELLED'
GROUP BY hca.account_name
)
)
WHERE rn = 1;
Но ROW_NUMBER()
не может быть уместным здесь. Вы не указали, что должно произойти, если две учетные записи имеют одинаковый счет. Если вы хотите показать только один из них, вам нужно выбрать способ использования, который вы можете сделать, добавив привязку к функции ORDER BY
. Если вы хотите показать оба, используйте вместо этого RANK()
.
(Я также перешел на ANSI присоединяется и использованные литералы, так что вы не полагаться на настройках NLS.)
SQL Fiddle demo.
Узнайте, как использовать явный синтаксис объединения. Аарон Бертран сделал несколько [** текст] ** (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins.aspx) об этом –
Спасибо за ссылку. Я узнаю больше о том, как правильно присоединиться к таблицам. К сожалению, это не проблема. – applesandgrapes
Замените 'Row' другим именем (может быть« ROW »внутри кавычек). «ROW» - зарезервированное ключевое слово в Oracle. – krokodilko