如何在不修改源表的前提下用Excel聚合提取SQL导出的非结构化数据
解决方案
方案1:Excel 365/2021 一键生成(无需手动整理表头)
直接在空白工作表的任意空白单元格输入以下公式即可自动输出完整的预期结果,完全不需要修改源表:
=PIVOTBY(源表!$B:$B, 源表!$A:$A, 源表!$C:$C, SUM, 0, 0, 1, 1)
公式说明:默认源表的B列为编码、A列为日期、C列为对应数值,你可以根据实际列号调整参数,返回结果会自动包含唯一编码行、唯一日期列,以及交叉位置的聚合值。如果需要取匹配到的第一个值而非求和,把
SUM替换为TAKE即可。
方案2:全版本Excel通用(无需辅助列)
不需要拼接字符串做辅助列,也不需要修改源表,手动提取唯一编码和日期作为行列表头后,在交叉值的第一个单元格输入以下公式:
=SUMPRODUCT((源表!$A:$A=当前列日期单元格)*(源表!$B:$B=当前行编码单元格)*源表!$C:$C)
公式说明:输入时注意锁定行列引用(日期列锁行、编码列锁列),输入完成后直接右拉、下拉即可填充所有单元格。如果需要没有匹配值时返回空而非0,可以调整为:
=IF(SUMPRODUCT((源表!$A:$A=当前列日期单元格)*(源表!$B:$B=当前行编码单元格)*源表!$C:$C)=0,"",SUMPRODUCT((源表!$A:$A=当前列日期单元格)*(源表!$B:$B=当前行编码单元格)*源表!$C:$C))如果你的场景中同一日期+同一编码只会有一条记录,也可以用多条件MATCH查询实现:
=INDEX(源表!$C:$C,MATCH(1,(源表!$A:$A=当前列日期单元格)*(源表!$B:$B=当前行编码单元格),0))
以上所有方案都不会对SQL导出的源工作表做任何修改,所有计算逻辑都在新工作表独立运行。
内容的提问来源于stack exchange,提问作者Tikhon
相关产品推荐
相关产品推荐

