如何调整SOQL查询以获取扁平化展示的Opportunity Line Items?
如何将Salesforce SOQL嵌套查询结果转为扁平化表格?
我在Salesforce Workbench中执行了以下SOQL查询:
SELECT Amount, Account.Name, Account.AccountNumber, Name, ( SELECT Quantity, UnitPrice, ProductCode,Product2.Name FROM OpportunityLineItems ) FROM Opportunity where Opportunity.Id IN ('07357Jez0204768')
当前查询结果里的OpportunityLineItems是以嵌套形式展示的,但我需要结果以扁平化表格形式呈现。请问是否需要修改查询语句?若需要,应如何调整?
附当前返回的JSON格式数据:
{ "attributes": { "type": "Opportunity", "url": "/services/data/v57.0/sobjects/Opportunity/q44l3KquPik6xxxxxxxx" }, "Amount": 115.00, "AccountId": "ihdvg2cCRj6Dxxxxxxxx", "Name": "realtimetest", "Id": "q44l3KquPik6xxxxxxxx", "OpportunityLineItems": { "totalSize": 1, "done": true, "records": [ { "attributes": { "type": "OpportunityLineItem", "url": "/services/data/v57.0/sobjects/OpportunityLineItem/IWHHTghK6MA8xxxxxxxx" }, "OpportunityId": "q44l3KquPik6xxxxxxxx", "Id": "IWHHTghK6MA8PzX8HQD9", "Quantity": 4.00, "UnitPrice": 5.00, "ProductCode": "product1Code", "Product2Id": "MFqTUKEOHojaxxxxxxxx", "Product2": { "attributes": { "type": "Product2", "url": "/services/data/v57.0/sobjects/Product2/MFqTUKEOHojaxxxxxxxx" }, "Id": "MFqTUKEOHojaxxxxxxxx", "Name": "product1Name" } } ] }, "Account": { "attributes": { "type": "Account", "url": "/services/data/v57.0/sobjects/Account/ihdvg2cCRj6Dxxxxxxxx" }, "Id": "ihdvg2cCRj6Dxxxxxxxx", "Name": "My Test Opp" } }
需要修改查询语句。原查询使用的是子查询(嵌套查询),这种写法会把关联的OpportunityLineItems作为嵌套数组返回,无法直接得到扁平化结果。要实现需求,应该直接从OpportunityLineItem对象出发,通过关联字段反向查询Opportunity和Account的信息,这样每条行项目会单独占据一行,关联的主记录信息会自动重复填充,正好匹配扁平化表格的展示形式。
调整后的SOQL查询:
SELECT Opportunity.Amount, Opportunity.Account.Name, Opportunity.Account.AccountNumber, Opportunity.Name, Quantity, UnitPrice, ProductCode, Product2.Name FROM OpportunityLineItem WHERE Opportunity.Id IN ('07357Jez0204768')
说明:
- 以
OpportunityLineItem作为查询主体,每条行项目对应一条结果记录 - 通过
Opportunity.字段名的方式获取所属机会的信息,Opportunity.Account.字段名获取关联账户的信息 - 在Workbench中执行该查询后,会直接返回扁平化的表格,每行对应一个机会行项目,同时带出所属机会和账户的相关字段
内容的提问来源于stack exchange,提问作者Christy
相关产品推荐
相关产品推荐

