我正在尝试为每个客户获取一组发票对象,但是我遇到的错误是,当一个客户有多个发票时,将为该客户创建一个新对象,这是新发票。相反,我希望属于该客户的每个发票都在该客户的发票数据内。同样不确定如何将总的合并发票合并到“ clientInvoiceTotal”的外部对象,并合并所有来自“ invoiceTotal”属性的发票。
CREATE PROCEDURE get_report
@userId INT,
@year INT
AS
SELECT
JSON_QUERY((
SELECT
cl.client_name AS clientName,
i.total AS clientInvoiceTotal,
JSON_QUERY((
SELECT
i.invoice_id AS invoiceId,
i.total AS invoiceTotal,
JSON_QUERY((
SELECT
s.service_name AS serviceName,
cis.service_price AS invoiced
FROM
case_identifier_to_service cis
INNER JOIN services s ON s.service_id = cis.service_id
WHERE cis.invoice_id = i.invoice_id
FOR JSON PATH
)) AS serviceData
FROM invoices i WHERE i.invoice_id = c.invoice_id
FOR JSON PATH
)) AS clientData
FROM
cases c
INNER JOIN clients cl ON cl.client_id = c.client_id
INNER JOIN invoices i ON i.invoice_id = c.invoice_id
WHERE c.user_id=@userId AND DATEPART(year, c.date_created) = @year
FOR JSON PATH
)) AS report
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
我应该返回的数据是:
{
"report":[
{
"clientName":"Client1",
"clientInvoiceTotal":59500.00,
"clientData":[
{
"invoiceId":100,
"invoiceTotal":59500.00,
"serviceData":[
{
"serviceName":"LDD",
"invoiced":59500.00
}
]
}
]
},
{
"clientName":"Client2",
"clientInvoiceTotal":53150.00,
"clientData":[
{
"invoiceId":101,
"invoiceTotal":8600.00,
"serviceData":[
{
"serviceName":"BCP",
"invoiced":4900.00
},
{
"serviceName":"BRS",
"invoiced":3700.00
}
]
},
{
"invoiceId":102,
"invoiceTotal":44550.00,
"serviceData":[
{
"serviceName":"DDBR",
"invoiced":44550.00
}
]
}
]
}
]
}
但是,相反,如果一个客户有多个发票,则会添加另一个具有重复客户名称的对象,我要返回的数据如下所示: INCORRECT :
{
"report":[
{
"clientName":"Client1",
"clientInvoiceTotal":59500.00,
"clientData":[
{
"invoiceId":100,
"invoiceTotal":59500.00,
"serviceData":[
{
"serviceName":"LDD",
"invoiced":59500.00
}
]
}
]
},
{
"clientName":"Client2",
"clientInvoiceTotal":8600.00,
"clientData":[
{
"invoiceId":101,
"invoiceTotal":8600.00,
"serviceData":[
{
"serviceName":"BCP",
"invoiced":4900.00
},
{
"serviceName":"BRS",
"invoiced":3700.00
}
]
}
]
},
{
"clientName":"Client2",
"clientInvoiceTotal":44550.00,
"clientData":[
{
"invoiceId":102,
"invoiceTotal":44550.00,
"serviceData":[
{
"serviceName":"DDBR",
"invoiced":44550.00
}
]
}
]
}
]
}