我有数据库结构。
/****** [Customers] ******/
CREATE TABLE [dbo].[Customers](
[CustomerID] [nchar](5) NOT NULL,
[CompanyName] [nvarchar](40) NOT NULL,
[ContactName] [nvarchar](30) NULL,
[ContactTitle] [nvarchar](30) NULL,
[Address] [nvarchar](60) NULL,
[City] [nvarchar](15) NULL,
[Region] [nvarchar](15) NULL,
[PostalCode] [nvarchar](10) NULL,
[Country] [nvarchar](15) NULL,
[Phone] [nvarchar](24) NULL,
[Fax] [nvarchar](24) NULL,
);
/****** [Orders] ******/
CREATE TABLE [dbo].[Orders](
[OrderID] [int] IDENTITY(1,1) NOT NULL,
[CustomerID] [nchar](5) NULL,
[EmployeeID] [int] NULL,
[OrderDate] [datetime] NULL,
[RequiredDate] [datetime] NULL,
[ShippedDate] [datetime] NULL,
[ShipVia] [int] NULL,
[Freight] [money] NULL,
[ShipName] [nvarchar](40) NULL,
[ShipAddress] [nvarchar](60) NULL,
[ShipCity] [nvarchar](15) NULL,
[ShipRegion] [nvarchar](15) NULL,
[ShipPostalCode] [nvarchar](10) NULL,
[ShipCountry] [nvarchar](15) NULL
);
/****** [Orders Details] ******/
CREATE TABLE [dbo].[Order Details](
[OrderID] [int] NOT NULL,
[ProductID] [int] NOT NULL,
[UnitPrice] [money] NOT NULL
);
我需要创建一个查询,该查询返回:OrderID,OrderDate,CompanyName和Total Order。
我正在尝试以下查询,但这是错误的,并且不知道可以采取哪些措施来达到预期的结果。
使用的查询:
SELECT Orders.OrderID, OrderDate, CompanyName,
(SELECT OrderID, SUM([UnitPrice])
FROM [Order Details] GROUP BY OrderID HAVING COUNT(OrderID)=1) AS TOTAL
FROM Orders
INNER JOIN Customers ON Customers.CustomerID = Orders.CustomerID
INNER JOIN [Order Details] ON [Order Details].OrderID = Orders.OrderID
这给出了错误:
消息116,级别16,状态1,行10 未引入子查询时在选择列表中指定 存在。
我不知道如何解决,有人可以帮助我。谢谢。
答案 0 :(得分:0)
由于您希望总计每个订单ID,因此需要将订单ID放在子查询上,并且必须从子查询选择中删除orderid
尝试如下
SELECT Orders.OrderID, OrderDate, CompanyName,
(SELECT SUM([UnitPrice])
FROM [Order Details] d
WHERE d.OrderID = Orders.OrderID
GROUP BY d.OrderID
) AS TOTAL
FROM Orders
INNER JOIN Customers ON Customers.CustomerID = Orders.CustomerID
INNER JOIN [Order Details] ON [Order Details].OrderID = Orders.OrderID
答案 1 :(得分:0)
您可以加入一个子查询,在该子查询中计算每个订单的总和。
SELECT o.[orderid],
o.[orderdate],
c.[companyname],
d.[total]
FROM [orders] o
LEFT JOIN [customers] c
ON c.[customerid] = o.[customerid]
LEFT JOIN (SELECT d.[orderid],
sum(d.[unitprice]) [total]
FROM [order details] d
GROUP BY d.[orderid]) d
ON d.[orderid] = o.[orderid];