У меня есть следующая таблица, в которой у меня есть два заказа на продажу, и каждый заказ на продажу имеет разное количество транзакций.
Проблема в том, что я получаю общую сумму заказа на продажу по каждой транзакции в таблице SQL Server, хотя на самом деле их нужно разделить поровну между количеством таких транзакций:
Я написал следующий запрос:
SELECT SalesOrder,
Transaction,
Max(Amount) / (SELECT COUNT(Transaction) AS Transaction FROM Test_Table GROUP BY SalesOrder)
FROM Test_Table
GROUP BY SalesOrder,
Transaction
Но это дает мне «Подзапрос вернул более 1 значения. Это не разрешено, когда подзапрос следует за =, !=, <, <=, >, >=
или когда подзапрос используется как выражение». ошибка. Может кто-нибудь объяснить, что это такое и как исправить эту ошибку?
Так как в подзапросе вы GROUP BY SalesOrder
он возвращает 1 строку для каждого SalesOrder
.
Но вы хотите количество транзакций для конкретного SalesOrder
.
Используйте оконные функции MAX() и COUNT():
SELECT DISTINCT SalesOrder, Transaction,
MAX(Amount) OVER (PARTITION BY SalesOrder, Transaction) /
COUNT(*) OVER (PARTITION BY SalesOrder)
FROM Test_Table
Если тип данных столбца Amount
— INTEGER, тогда SQL Server выполнит целочисленное деление, поэтому, возможно, вам нужно сначала умножить на 1.0
, чтобы получить правильный результат с десятичными знаками:
SELECT DISTINCT SalesOrder, Transaction,
1.0 * MAX(Amount) OVER (PARTITION BY SalesOrder, Transaction) /
COUNT(*) OVER (PARTITION BY SalesOrder)
FROM Test_Table
Попробуй это
SELECT SaleOrder, [Transaction]
, Max(Amount) / COUNT([Transaction]) over (partition by SaleOrder)
FROM Test_Table GROUP BY SaleOrder,[Transaction]
Я не думаю, что вы хотите group by
, просто оконные функции:
SELECT SalesOrder, Transaction,
Amount) / COUNT(*) OVER (PARTITION BY salesorder)
FROM Test_Table;