Нужна помощь с подзапросом SQL - PullRequest
1 голос
/ 08 февраля 2010

Я хочу подсчитать общее количество строк сведений о заказе по всем заказам, которые когда-либо имел клиент.

Это мой запрос

SELECT SUM(
           (SELECT count(*) 
            FROM dbo.Order_Details 
            WHERE dbo.Order_Details.OrderID = dbo.Orders.OrderID))
    FROM dbo.Orders
    WHERE dbo.Orders.CustomerID = "123"

SQL Server выдает мне сообщение «Невозможно выполнить статистическую функцию для выражения, содержащего агрегат или подзапрос».

Любая помощь с этим будет оценена.

Ответы [ 6 ]

3 голосов
/ 08 февраля 2010
SELECT COUNT(*)
FROM Orders
    INNER JOIN Order_Details ON Orders.OrderID = Order_Details.OrderID
WHERE Orders.CustomerID = "123"
0 голосов
/ 08 февраля 2010

Далее предполагается, что в таблице Order_Details имеется столбец с именем OrderDetailID. Если нет, просто замените уникальный идентификатор для подробной записи заказа.

SELECT COUNT(DISTINCT OD.OrderDetailID)
FROM Orders O
  LEFT JOIN Order_Details OD on (OD.OrderId = O.OrderId)
WHERE O.CustomerID = "123"
0 голосов
/ 08 февраля 2010

Я думаю, что-то вроде следующего должно делать то, что вы хотите:

select count(1) from dbo.order_details d
join dbo.orders o on d.OrderId=o.OrderId
where dbo.orders.CustomerID="123"
0 голосов
/ 08 февраля 2010

Граф (*) выполняет суммирование для вас. Просто удалите совокупный SUM из вашего выражения.

0 голосов
/ 08 февраля 2010

Разве это не должно быть просто:

SELECT count(*) FROM dbo.Order_Details, dbo.Orders 
 WHERE dbo.Order_Details.OrderID = dbo.Orders.OrderID
 AND dbo.Orders.CustomerID = "123"
0 голосов
/ 08 февраля 2010

Вам не нужна сумма (), так как счетчик (*) уже даст вам сумму.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...