我有以下SQL Server选择查询:
SELECT s.RefId
,s.LocalId
,s.StateProvinceId
,s.SchoolName
,e.Email
,e.EmailType
FROM SchoolInfo s
LEFT OUTER JOIN SchoolEmail e
ON e.SchoolRefId = s.RefId
WHERE s.RefId = :ref_id
在DataWeave中转换为JSON:
%dw 2.0
output application/json
---
payload
输出:
[
{
"StateProvinceId": "SA",
"RefId": "7FDF722B-6BBA-4BF0-8205-A5380B269EF1",
"EmailType": "prm",
"LocalId": "1",
"SchoolName": "Steve's School",
"Email": "steven@email.com"
},
{
"StateProvinceId": "SA",
"RefId": "7FDF722B-6BBA-4BF0-8205-A5380B269EF1",
"EmailType": "sec",
"LocalId": "1",
"SchoolName": "Steve's School",
"Email": "test@gmail.com"
}
]
但我希望将其与常见元素合并以生成所需的输出:
{
"RefId": "7FDF722B-6BBA-4BF0-8205-A5380B269EF1",
"LocalId": "1",
"StateProvinceId": "SA",
"SchoolName": "Steve's School",
"Emails": [
{
"Email": "steven@email.com",
"EmailType": "prm"
},
{
"Email": "test@gmail.com",
"EmailType": "sec"
}
]
}
我如何在M子4中做到这一点?
谢谢,史蒂夫
甚至这个
%dw 2.0
output application/json
var Emails =
"Emails": payload map {
Email: $.Email,
EmailType: $.EmailType
}
---
payload distinctBy($.StateProvinceId) map {
StateProvinceId: $.StateProvinceId,
RefId: $.RefId,
Emails: Emails.Emails
}
谢谢萨利姆!在---之后,我试图做所有事情,我什至没有想到要像这样提取电子邮件!问题:您为什么要通过StateProvinceID来进行区分?看起来它生成了一个数组:[{“ RefId”:“ 7FDF722B-6BBA-4BF0-8205-A5380B269EF1”,“ LocalId”:“ 1”,“ SchoolName”:“ Steve's School”,“ StateProvinceId”:“ SA” ,“电子邮件”:[{“电子邮件”:“ steven@gmail.com”,“电子邮件类型”:“ prm”},{“电子邮件”:“ test@gmail.com”,“电子邮件类型”:“秒”}]我们如何删除顶部数组?
可以避免重复输入中只需要一次的键。同样,您可以执行以下操作以获取输出
您是否碰巧有其他输入(不同的stateProvinceId)可以帮助使其成为通用解决方案。
RefId是唯一键,因此我认为在该元素上的distinctBy应该很好。“同样,您可以执行类似的操作以获取输出”-您是否完成了消息?
是的,通过访问最终数组的[0]元素,在下面发布了