为同一Encounter创建条件匹配字段值的拼接列
为同一Encounter创建条件匹配字段值的拼接列
嘿,新手朋友不用慌!我太懂这种找不到关键词搜索的窘境了——其实你要做的就是给同一个Encounter下的每一行,都添上该Encounter所有非Paired类型(也就是Tag1这类标签)的拼接列对吧?下面给你两种常用场景的解决方法,按需选就行:
用Excel/Google Sheets实现
假设你的数据从A1单元格开始(表头在第一行),你可以在F2单元格输入以下公式,然后下拉填充到所有行:
=TEXTJOIN(", ", TRUE, IF($A$2:$A$6=A2, IF($C$2:$C$6<>"Paired", $C$2:$C$6, ""), ""))
公式说明:
$A$2:$A$6=A2:匹配当前行的Encounter,找到同组的所有行$C$2:$C$6<>"Paired":筛选出同组里不是Paired的类型(也就是你的Tag标签)TEXTJOIN(", ", TRUE, ...):把筛选出来的Tag标签用逗号加空格拼接起来,TRUE表示忽略空值
注意:如果是旧版Excel,输入公式后需要按
Ctrl+Shift+Enter作为数组公式执行;新版Excel和Google Sheets直接回车就行。
对应你的例子,Encounter 12345的每一行的这个新列都会显示Tag1,完美符合你的需求。
用SQL实现
如果你的数据存在数据库里,用字符串聚合函数就能快速搞定,不同数据库的函数略有不同:
SQL Server/PostgreSQL 版本
SELECT t.Encounter, t.ItemNum, t.AType, t.Returned, t.HasReturn, -- 拼接同一Encounter下的所有Tag类型 STRING_AGG(t2.AType, ', ') AS Tag_List FROM your_table t LEFT JOIN your_table t2 ON t.Encounter = t2.Encounter AND t2.AType <> 'Paired' GROUP BY t.Encounter, t.ItemNum, t.AType, t.Returned, t.HasReturn;
MySQL 版本
把上面的STRING_AGG换成GROUP_CONCAT就行:
SELECT t.Encounter, t.ItemNum, t.AType, t.Returned, t.HasReturn, GROUP_CONCAT(t2.AType SEPARATOR ', ') AS Tag_List FROM your_table t LEFT JOIN your_table t2 ON t.Encounter = t2.Encounter AND t2.AType <> 'Paired' GROUP BY t.Encounter, t.ItemNum, t.AType, t.Returned, t.HasReturn;
执行后,每一行都会带上对应Encounter的所有Tag拼接结果,比如你的例子里所有Encounter 12345的行,Tag_List列都是Tag1。
以后再碰到类似需求,搜“分组拼接字段值”“同组聚合字符串”这类关键词就能找到解决方案啦!
备注:内容来源于stack exchange,提问作者Truey
相关产品推荐
相关产品推荐

