如何将SQL转换为Excel公式?

巴斯特尔

我有一个包含原始数据的Excel工作表,我想在另一个表中对其进行自定义视图以用于报告目的。

如何将以下伪代码转换为Excel?

select ColA, ColB, ColC from SheetA where (SheetA.ColD in ("x","y","z") or SheetA.ColE in ("1","2","3"))

我正在根据VLOOKUP MATCH和INDEX寻找解决方案。

工程师吐司

从注释中复制:在Excel 2010(和其他)中,您可以创建对Excel文件的查询。在“数据”功能区的“获取外部数据”部分(左侧)中,选择“来自其他来源”,然后选择“来自Microsoft Query”。您应该已经具有“ Excel文件”的数据源设置。之后,您可以在MS Query中构建一些可用的工具。


如果您真的想要一个公式响应,那么您将不得不处理一些混乱。首先,使它更容易加载的最重要步骤是在原始数据中添加一个字段以处理该WHERE语句。我要称呼它ColF,其公式可能看起来像这样:

=SUM(IFERROR(MATCH([@ColD],x,0),0),IFERROR(MATCH([@ColD],y,0),0),IFERROR(MATCH([@ColD],z,0),0),IFERROR(MATCH([@ColE],range1,0),0),IFERROR(MATCH([@ColE],range2,0),0),IFERROR(MATCH([@ColE],range3,0),0))>0

对于您的自定义视图,您需要创建另一个表,该表具有与原始表相同的行数。此外ColAColBColC,你可能要一个字段与查找帮助。您可以将公式放在每列中,但这只是毫无理由的膨胀,会减慢计算速度。查找部分看起来像这样(请注意,这是一个用CTRL+ ALT+输入的数组公式ENTER):

{=IFERROR(SMALL(IF(Table1[ColF],ROW(Table1[ColF])),ROW()-1),"")}

这将是原始数据中符合公式中定义的条件的所有行号的列表ColF最后会有一些空白。接下来的几个字段仅INDEX基于Row

=IFERROR(INDEX(Table1[ColA],[@Row]-1),"")
=IFERROR(INDEX(Table1[ColB],[@Row]-1),"")
=IFERROR(INDEX(Table1[ColC],[@Row]-1),"")

有你的桌子。您必须按照自己喜欢的方式处理底部的空白行。自动过滤器可以正常工作。如前所述,可以Row通过使其他公式成为更长的数组公式来摆脱该字段:

{=IFERROR(INDEX(Table1[ColA],SMALL(IF(Table1[ColF],ROW(Table1[ColF])),ROW()-1)-1),"")}

...但是那会使事情变慢。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章