Collect语句的使用方法

ABAP Collect 语句详解
本文详细介绍了ABAP中Collect语句的使用方法及注意事项。Collect语句用于根据唯一键将表中的指定字段自动累加,适用于报表开发中统计数据总量的需求。文章通过示例解释了如何设置累加字段,并强调了使用的条件限制。

Collect语句镶嵌在select---endselect之中使用,在报表开发中经常用到,作用是根据tableunique key,把表中其他的字段进行自动的累加,一般用在对某些数据进行总数统计的时候.

举例如下:

data:begin of mytable,

  keyfield  like XXX,

fliedl1   like XXX,

 field2    like XXX,

end of mytable.

Data: mytable_col like hashed table of mytable

    With unique key keyfield with headline.

 

select keyfield fliedl1 field2 from table_system

  into (mytable- keyfield, mytable-fliedl1, mytable- field2).

Collect mytable into mytable_col.

Endselect.

 

这个例子的作用是以keyfield为主键,fliedl1fliedl2的数据进行累加,计算属于每个keyfieldfliedl1fliedl1的总和.

Collect使用有两个条件:

1.       累加时送入的表必须时hashed table或者 sorted table,即必须拥有唯一的key.

2.       除了key之外的其他属性必须时数字型的,才能进行累加计算.

当然 mytable mytable_col.的表的类型必须完全一致.

一般的报表在生成时都需要对大量的数据进行计算,这时使用collect语句的好处就是不用在把数据取到本地后再loop进行累加,降低报表对系统的压力.

 
在 Cypher 查询语言中,`collect` 是一个非常实用的聚合函数,它用于将多个值收集到一个列中。这种操作在处理图数据时尤其常见,例如收集某个节点的所有邻居、路径中的节点或属性值等。`collect` 通常与其他查询逻辑结合使用,以生成结构化的结果。 ### 示例 1: 收集节点的属性值 假设有一个图数据库,其中包含多个用户节点,每个用户节点具有 `name` 属性。以下查询可以收集所有用户的名称,并将它们存储在一个列中: ```cypher MATCH (u:User) RETURN collect(u.name) AS names ``` 此查询将返回一个包含所有用户名称的列,例如 `["Alice", "Bob", "Charlie"]`。 ### 示例 2: 收集路径中的节点 假设有一个图示社交网络,用户之间通过 `FRIENDS_WITH` 关系连接。以下查询可以找到从用户 "Alice" 出发的所有路径,并收集路径中的节点: ```cypher MATCH path = (a:User {name: "Alice"})-[:FRIENDS_WITH*1..3]->(f:User) RETURN collect(nodes(path)) AS allPaths ``` 此查询将返回一个包含所有路径中节点的列,每个路径示一个从 "Alice" 到其他用户的连接。 ### 示例 3: 结合 `CASE` 使用 `collect` 在某些情况下,可能需要根据条件过滤或转换数据后再进行收集。例如,以下查询将收集所有年龄大于 30 的用户名称: ```cypher MATCH (u:User) RETURN collect(CASE WHEN u.age > 30 THEN u.name ELSE NULL END) AS olderUsers ``` 此查询将返回一个列,其中包含所有年龄大于 30 的用户名称,其他用户的名称将被忽略。 ### 示例 4: 收集关系的属性 假设每个关系 `FRIENDS_WITH` 具有 `since` 属性,示朋友关系的建立时间。以下查询将收集所有朋友关系的建立时间: ```cypher MATCH (a:User)-[r:FRIENDS_WITH]->(b:User) RETURN collect(r.since) AS friendshipDates ``` 此查询将返回一个包含所有朋友关系建立时间的列。 ### 示例 5: 结合 `UNWIND` 使用 `collect` `unwind` 可以将列展开为多个行,而 `collect` 可以将这些行重新聚合为列。以下查询展示了如何结合使用两个功能: ```cypher WITH [1, 2, 3, 4] AS numbers UNWIND numbers AS num WITH num * 2 AS doubled RETURN collect(doubled) AS doubledNumbers ``` 此查询将返回一个包含所有双倍值的列,例如 `[2, 4, 6, 8]`。 ### 示例 6: 收集特定条件下的关系 在某些场景中,可能需要收集满足特定条件的关系。例如,以下查询将收集所有指向某个用户的 `FRIENDS_WITH` 关系: ```cypher MATCH (a:User)<-[r:FRIENDS_WITH]-(b:User) WHERE a.name = "Alice" RETURN collect(r) AS incomingFriendships ``` 此查询将返回一个包含所有指向 "Alice" 的朋友关系的列。 ### 示例 7: 收集唯一值 如果需要收集唯一值,可以结合 `DISTINCT` 使用 `collect`。例如,以下查询将收集所有用户的唯一名称: ```cypher MATCH (u:User) RETURN collect(DISTINCT u.name) AS uniqueNames ``` 此查询将返回一个包含所有唯一用户名称的列。 ### 示例 8: 收集多列数据 `collect` 还可以用于收集多列数据。例如,以下查询将收集每个用户的名称和年龄: ```cypher MATCH (u:User) RETURN collect({name: u.name, age: u.age}) AS users ``` 此查询将返回一个包含所有用户名称和年龄的列,每个用户以键值对形式示。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值