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)?如果您有与表相对应的数据模型,那么您就可以很容易地做到这一点。