用子查询和Max查询没有成功

时间:2018-09-19 10:40:57

标签: sql sql-server

我有数据库结构。

/****** [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   未引入子查询时在选择列表中指定   存在。

我不知道如何解决,有人可以帮助我。谢谢。

2 个答案:

答案 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];