【发布时间】:2017-06-07 13:05:44
【问题描述】:
我正在尝试根据表格数据库 sqlserver/mysql 中已经存在的数据为 mongodb 设计源文档。
为了练习,我准备了三个表客户,产品和订单交易,架构如下
USE scratch
GO
CREATE TABLE Customer(customer_id int identity(1,1), FirstName varchar(100),LastName varchar(100));
Create TAble Product(Product_id int identity(1,1), Name varchar(100), Price numeric(18,2), Unit varchar(10));
CREATE TABLE OrderTransaction(Tr_id int identity(1,1), customer_id int, Product_id int ,Quantity int, TotalCost numeric, trdate datetime, weigh int , weighunit varchar(100));
INSERT INTO Customer(FirstName,LastName)
SELECT 'Harry','G'
UNION ALL
SELECT 'Jenne','G'
UNION ALL
SELECT 'Gill','G'
UNION ALL
SELECT 'Tom','G'
UNION ALL
SELECT 'Bai','G'
INSERT INTO Product(Name,Price, Unit )
SELECT 'Sugar',100,'kg'
UNION ALL
SELECT 'Olive Oil',500,'litre'
UNION ALL
SELECT 'Loreal Face Wash',200,NULL
UNION ALL
SELECT 'FLour',400,'kg'
UNION ALL
SELECT 'Onion',20,'kg'
UNION ALL
SELECT 'Potato',10,'kg'
INSERT INTO OrderTransaction(customer_id,Product_id,Quantity,TotalCost,trdate,weigh,weighunit)
SELECT 1,1,5,500,GETDATE()-40,5,'kg'
UNION ALL
SELECT 1,2,1,2500,GETDATE()-40,5,'litre'
UNION ALL
SELECT 1,3,5,500,GETDATE()-30,5,'kg'
UNION ALL
SELECT 1,4,1,200,GETDATE()-30,NULL,NULL
UNION ALL
SELECT 1,5,5,100,GETDATE(),5,'kg'
UNION ALL
SELECT 1,6,5,50,GETDATE(),5,'kg'
UNION ALL
SELECT 2,1,5,500,GETDATE()-40,5,'kg'
UNION ALL
SELECT 2,2,1,2500,GETDATE()-40,5,'litre'
UNION ALL
SELECT 2,3,5,500,GETDATE()-30,5,'kg'
UNION ALL
SELECT 2,4,1,200,GETDATE()-30,NULL,NULL
UNION ALL
SELECT 2,5,5,100,GETDATE(),5,'kg'
UNION ALL
SELECT 2,6,5,50,GETDATE(),5,'kg'
我在 sql server 2016 中尝试过 Json Path,但没有找到任何文档 根据客户对交易进行分组,它将每笔交易创建为一个文档。
select a.customer_id as 'Customer.customer_id'
,FirstName as 'Customer.FirstName'
,LastName as 'Customer.LastName'
,Tr_id as 'Customer.AllTransaction.Tr_id'
,b.Product_id as 'Customer.AllTransaction.Product_id'
,Quantity as 'Customer.AllTransaction.Quantity'
,TotalCost as 'Customer.AllTransaction.TotalCost'
,p.Name as 'Customer.AllTransaction.ProductName'
from Customer a
inner join OrderTransaction b
on a.customer_id=b.customer_id
inner join Product p
on b.Product_id=p.Product_id
FOR JSON PATH
我想编写一个查询来准备 json,例如:
[
{
"customer_id": 1,
"FirstName": "Harry",
"LastName": "G",
"totalsales": 3850.0,
"LastTransactionDate": "2014-12-1208: 42: 00.000Z",
"AllTransctionList": [
{
"Tr_id": 1,
"Product_id": 1,
"Quantity": 5,
"TotalCost": 500,
"ProductName": "Sugar"
},
{
"Tr_id": 2,
"Product_id": 2,
"Quantity": 1,
"TotalCost": 2500,
"ProductName": "Olive Oil"
},
{
"Tr_id": 3,
"Product_id": 3,
"Quantity": 5,
"TotalCost": 500,
"ProductName": "Loreal Face Wash"
},
{
"Tr_id": 4,
"Product_id": 4,
"Quantity": 1,
"TotalCost": 200,
"ProductName": "FLour"
},
{
"Tr_id": 5,
"Product_id": 5,
"Quantity": 5,
"TotalCost": 100,
"ProductName": "Onion"
},
{
"Tr_id": 6,
"Product_id": 6,
"Quantity": 5,
"TotalCost": 50,
"ProductName": "Potato"
}
]
},
{
"customer_id": 2,
"FirstName": "Jenne",
"LastName": "G",
"totalsales": 3850.0,
"LastTransactionDate": "2014-12-1208: 42: 00.000Z",
"AllTransctionList": [
{
"Tr_id": 1,
"Product_id": 1,
"Quantity": 5,
"TotalCost": 500,
"ProductName": "Sugar"
},
{
"Tr_id": 2,
"Product_id": 2,
"Quantity": 1,
"TotalCost": 2500,
"ProductName": "Olive Oil"
},
{
"Tr_id": 3,
"Product_id": 3,
"Quantity": 5,
"TotalCost": 500,
"ProductName": "Loreal Face Wash"
},
{
"Tr_id": 4,
"Product_id": 4,
"Quantity": 1,
"TotalCost": 200,
"ProductName": "FLour"
},
{
"Tr_id": 5,
"Product_id": 5,
"Quantity": 5,
"TotalCost": 100,
"ProductName": "Onion"
},
{
"Tr_id": 6,
"Product_id": 6,
"Quantity": 5,
"TotalCost": 50,
"ProductName": "Potato"
}
]
}
]
【问题讨论】:
-
首先您需要确定您使用的是哪个 DBMS。您同时声明了 mysql 和 sqlserver。每个人的解决方案都会大不相同。
标签: mysql sql sql-server json