有什么方法可以使用 SQL Server 2019 构建一个看起来像这样的 JSON 吗?
Is there any way to build a JSON that looks like this using SQL Server 2019?
我有这个 SQL 查询:
SELECT
c.customer_name as name,
c.customer_ssn as social_number,
c.telephone as telephone,
c.email as email,
u.user_name as name
FROM
Customer c
LEFT OUTER JOIN
User u ON c.id_customer = u.id_customer
WHERE
c.id_customer = 2
FOR JSON PATH
SELECT * FROM Customer WHERE ID_CUSTOMER = 2
SELECT * FROM User WHERE ID_Customer = 2
这个查询 returns 这个 JSON :
[
{
"name": "blablabla",
"social": "123123123",
"telephone": "91123123",
"email": "blabla@gmail.com",
"name":"blabla"
}
]
有什么方法可以得到像这样的 JSON:
{
"name": "blabla",
"social_number": "123123123",
"emails": [
{
"email": "blabla@gmail.com"
},
{
"email": "blablabla@gmail.com"
}
],
"telephones": [
{
"number": "(604)6622141"
},
{
"number": "(652) 2123223"
}
],
感谢您的帮助!
我对编码和 Whosebug 还是个新手...如有任何错误,我们深表歉意!
您可以使用相关子查询,每个子查询 FOR JSON
SELECT
c.customer_name as name,
c.customer_ssn as social_number,
telephones = (
SELECT telephone
FROM telephone t
WHERE t.id_customer = c.id_customer
FOR JSON PATH
),
emails = (
SELECT email
FROM email e
WHERE e.id_customer = c.id_customer
FOR JSON PATH
),
u.user_name as name
FROM
Customer c
LEFT OUTER JOIN
User u ON c.id_customer = u.id_customer
WHERE
c.id_customer = 2
FOR JSON PATH;
您也可以 APPLY
SELECT
c.customer_name as name,
c.customer_ssn as social_number,
t.telephones,
e.emails,
u.user_name as name
FROM
Customer c
LEFT OUTER JOIN
User u ON c.id_customer = u.id_customer
OUTER APPLY (
SELECT telephone
FROM telephone t
WHERE t.id_customer = c.id_customer
FOR JSON PATH
) t(telephones)
OUTER APPLY (
SELECT email
FROM email e
WHERE e.id_customer = c.id_customer
FOR JSON PATH
) e(emails)
WHERE
c.id_customer = 2
FOR JSON PATH;
我有这个 SQL 查询:
SELECT
c.customer_name as name,
c.customer_ssn as social_number,
c.telephone as telephone,
c.email as email,
u.user_name as name
FROM
Customer c
LEFT OUTER JOIN
User u ON c.id_customer = u.id_customer
WHERE
c.id_customer = 2
FOR JSON PATH
SELECT * FROM Customer WHERE ID_CUSTOMER = 2
SELECT * FROM User WHERE ID_Customer = 2
这个查询 returns 这个 JSON :
[
{
"name": "blablabla",
"social": "123123123",
"telephone": "91123123",
"email": "blabla@gmail.com",
"name":"blabla"
}
]
有什么方法可以得到像这样的 JSON:
{
"name": "blabla",
"social_number": "123123123",
"emails": [
{
"email": "blabla@gmail.com"
},
{
"email": "blablabla@gmail.com"
}
],
"telephones": [
{
"number": "(604)6622141"
},
{
"number": "(652) 2123223"
}
],
感谢您的帮助!
我对编码和 Whosebug 还是个新手...如有任何错误,我们深表歉意!
您可以使用相关子查询,每个子查询 FOR JSON
SELECT
c.customer_name as name,
c.customer_ssn as social_number,
telephones = (
SELECT telephone
FROM telephone t
WHERE t.id_customer = c.id_customer
FOR JSON PATH
),
emails = (
SELECT email
FROM email e
WHERE e.id_customer = c.id_customer
FOR JSON PATH
),
u.user_name as name
FROM
Customer c
LEFT OUTER JOIN
User u ON c.id_customer = u.id_customer
WHERE
c.id_customer = 2
FOR JSON PATH;
您也可以 APPLY
SELECT
c.customer_name as name,
c.customer_ssn as social_number,
t.telephones,
e.emails,
u.user_name as name
FROM
Customer c
LEFT OUTER JOIN
User u ON c.id_customer = u.id_customer
OUTER APPLY (
SELECT telephone
FROM telephone t
WHERE t.id_customer = c.id_customer
FOR JSON PATH
) t(telephones)
OUTER APPLY (
SELECT email
FROM email e
WHERE e.id_customer = c.id_customer
FOR JSON PATH
) e(emails)
WHERE
c.id_customer = 2
FOR JSON PATH;