Sql 如何将一个订单中的所有产品添加到列表中

Sql 如何将一个订单中的所有产品添加到列表中,sql,sql-server,linq,Sql,Sql Server,Linq,我编写了一个返回数据的查询,下面是我的代码 SELECT o.Id, p.ProductName, po.Quantity, p.Price, DeliveryMethod, OrderDate, TotalSum, u.UserName FROM [Order] o JOIN ProductsOrders po ON o.Id = po.OrderId JOIN Product p ON po.ProductId = p.Id JOIN Users u ON o.UserId = u.Id

我编写了一个返回数据的查询,下面是我的代码

SELECT o.Id, p.ProductName, po.Quantity, p.Price, DeliveryMethod, 
OrderDate, TotalSum, u.UserName FROM [Order] o
JOIN ProductsOrders po ON o.Id = po.OrderId
JOIN Product p ON po.ProductId = p.Id
JOIN Users u ON o.UserId = u.Id
ORDER BY o.Id
接下来返回:

OrderId ProductName Quantity Price DeliveryMethod OrderDate TotalSum UserName
98         Bed3       1      3000    Express    2018-08-04  7015    Ivan
98         Bed4       1      4000    Express    2018-08-04  7015    Ivan
100        Bed2       1      2000               2018-08-05  2000    Ivan
101        Bed2       1      2000               2018-08-05  5000    Ivan
101        Bed3       1      3000               2018-08-05  5000    Ivan
102        Bed0       1        0    Standard    2018-09-04  1005    Ivan
我们可以注意到,对于每个产品-一个记录

但我想将所有产品按一个订单进行分组,得到如下结果:

- orderId
- deliveryMethod
- userName
  - product1   quantity    price
  - ...
  - productN   quantity    price
- totalAmount

101
Courier
John Doe
  Black bag       1   1500
  Fat Bike        1   5000
  Thermos bottle  5   200
Total amount      7500

如何修改查询?

IMO,正确的方法是选择两个数据集。第一个数据集包含父订单数据,第二个数据集包含第一个数据集中订单的各个ProductsOrders(产品线项目)

-- Select Orders
SELECT
     [o].[Id] AS [OrderId]
    ,[o].[DeliveryMethod]
    ,[o].[OrderDate]
    ,[u].[UserName]
FROM [Order] [o]
    INNER JOIN [Users] [u] ON [o].[UserId] = [u].[Id]
WHERE
    [o].[Id] IN(SomeRangeOfOrderIds) -- (Or however you'd like to filter the results)


-- Select Products (product line items)
SELECT
     [p].[ProductName]
    ,[po].[Quantity]
    ,[p].[Price]
FROM [ProductsOrders] [po]
    INNER JOIN [Product] [p] ON [po].[ProductId] = [p].[Id]
WHERE
    [po].[OrderId] IN(SameRangeOfOrderIdsAsTheQueryAbove)

…然后获取这些结果并以您喜欢的方式显示它们。这会出现在报告中吗?或者在网页上?

我刚刚在LINQ中实现了这个问题。应该注意到存在多对多关系

var orders = db.Orders.Select(o => new
        {
            o.Id,
            o.DeliveryMethod,
            o.OrderDate,
            o.UserId,
            o.TotalSum,
            Products = o.ProductsOrders.Select(p => new { p.Product.ProductName, p.Quantity, p.Product.Price}).ToList()
        }).ToList();

您想要做的看起来像是SQL Server Reporting Services(SSRS)、Microsoft Excel或其他实用程序的工作。任何以这种格式显示查询结果的尝试都像用牙刷刷刷墙一样。此数据库是否有ORM(即Django)?如果您有与表相对应的数据模型,那么您就可以很容易地做到这一点。