Besoin d'aide avec la sous-requête SQL

Je veux countr le nombre total de rangées de détails de command sur toutes les commands qu'un client a déjà eues.

C'est ma requête

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 me donne une erreur "Impossible d'effectuer une fonction d'agrégation sur une expression contenant un agrégat ou une sous-requête."

Toute aide avec ceci serait appréciée.

Cela ne devrait-il pas être simplement:

 SELECT count(*) FROM dbo.Order_Details, dbo.Orders WHERE dbo.Order_Details.OrderID = dbo.Orders.OrderID AND dbo.Orders.CustomerID = "123" 
 SELECT COUNT(*) FROM Orders INNER JOIN Order_Details ON Orders.OrderID = Order_Details.OrderID WHERE Orders.CustomerID = "123" 

Vous n'avez pas besoin de la sum () puisque le count (*) va déjà vous donner le total.

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

Le comte (*) fait la sommation pour vous. Supprimez simplement l'agrégat SUM de votre expression.

Je devrais penser quelque chose comme ce qui suit devrait faire ce que vous voulez:

 select count(1) from dbo.order_details d join dbo.orders o on d.OrderId=o.OrderId where dbo.orders.CustomerID="123" 

Ce qui suit suppose que vous avez une colonne dans la table Order_Details appelée OrderDetailID. Si ce n'est pas le cas, remplacez simplement l'identifiant unique de l'logging de détail de la command.

 SELECT COUNT(DISTINCT OD.OrderDetailID) FROM Orders O LEFT JOIN Order_Details OD on (OD.OrderId = O.OrderId) WHERE O.CustomerID = "123"