2023-08
18

蓝调了

By xrspook @ 8:24:16 归类于: 烂日记

周四的傍晚时分,我突然有点码农蓝调的感觉,因为好像无论我怎么整,前面总有无数的奇奇怪怪的问题。这些问题居然没有大路的答案。原因是Excel的SQL已经被阉割到一种没人能说得清的程度了。我就想知道到底Excel里的SQL有什么样的函数,知道有什么函数,知道函数怎用,才能以各种叠加的方式得出我的招数,但问题是人微软自己的手册都没有说清楚到底Excel里的SQL可以怎么个用法?相比之下,Access写清楚了,SQL Server也写清楚了,不同版本的函数不一样,些高版本能轻而易举函数就能实现的功能旧版本也有替代方法。但是Excel里的SQL像一个谜一样。你得不断尝试直到绝望。因为你拿着那个问题去搜索,没有结果,结果都是其它数据库的,虽然都叫做SQL,但差别真的很大。

的确用VBA+ADO+SQL搭配能解决一些小数据的问题,而且速度很快,但为什么微软在这个基础上还要继续整出 Power Query和Power Pivot,因为他们知道在操控数据方面,VBA本身真的有很多限制。当我死磕了一周以后,我发现VBA要死要活折腾半天出来的东西如果在PP里两下就搞定了,而且那还是在可视化的情况之下。至于PP,那是不允许你用不可行的方式去操控的,所以虽然三个都在考验逻辑,但是在Excel的SQL里面,我觉得对我最大的考验是,我明明知道要那么干,我明明知道用其它工具应该怎么干,但是无论如何我在这个Excel VBA里面就干不出来。

我遇到的某些问题,跟SQL没有关系,纯粹是VBA数组的问题。VBA的一元数组,如果要输出的话,它会在一行里输出,但如果你要把这个一维数组在列里面输出,你就得做个转置。我遇到的问题是,即便我已经设定了转制。系统依然说我的类型错误,最后我是怎么干的呢?明明我那个是一维数组就可以实现了,但为了可以顺畅输出,我硬是把那个东西设置为了二维数组,另外一维完全是空的。这样的话在我输出到单元格的时候只给予一列的空间也就是那空的第二维根本不用管他。经过SQL处理生成的记录集,如果要输出到数组,通常是一个二维数组,那个二维数组跟VBA自己的数组又是转置的关系的,那个记录集的数组编码是从0开始的,VBA默认的数组是从1开始的。如果在VBA里把一个字符串打断赋值给数组那又是从0开始的。在python里,默认就是从0开始,什么东西都从0开始了,所以你不需要为长度跟起始数值还有突然间又有个转置之类烦恼。

周四我遇到一个算是逻辑意外的事件。我要筛选某个表里某一字段不包含某个关键词的记录,但问题是那个字段里的东西有关键词也有空,我需要筛选出来的记录是关键词以外的其它字符以及空的。当我where 字段A not like ‘%关键词%’的时候,结果出乎我的意料。因为那个关键词是包含的关系,所以我没有办法精确控制,所以我必须在关键词的前后加上%。这句筛选的结果是字段里所有那个字段的记录都没有被筛选出来。不就是一个包含的关系吗?Excel的SQL里面允许用正则吗?最终我用的方式是在where里面用两句话,一个是not like,筛选到那个字段里没有关键词,但是有其它字符的记录,另外一个是用or的关系搭配一个isnull(字段A),这到底是什么情况呢?如果在其他地方,一个contain之类的东西就能表达出来,如果允许用正着,正则也能很好表示不包含关键词,Excel的SQL到底允许我用什么工具呢?

SQL in Excel这把刀到底应该怎么玩???

2 条评论

  1. 你都用ado了,这是比较专业的数据处理方法,用sql、游标加计算机程序语言可以处理任何复杂的需求。
    但是你的工具不合适,用的人很少就说明了这一点。vba语法奇怪,使用的技术都是微软独有的,ado就是简化版的oledb,但是用起来一点也不简单。你现在的那些困扰在10几年前出版的一些大部头参考手册里面都能找到答案,但是我敢说你如果你在现实生活里看到这些手册,你不会想学的。(我有几本,几乎没有翻过,已经扔了)
    我怀疑你用的python也不对,数据分析用的是ipython,是交互式的。
    数据分析必须把数据和格式以及其它任何和数据无关的东西分离出来,只有数据值和数据类型。分离出来后,用任何简单的技术都能简便处理。excel看起来牛逼哄哄,核心功能和wps表格没有任何区别。你甚至可以把excel里面的数据保存到sqlite里面去,然后随便找一个sql客户端连上去,sqlite能够支持的sql也足够你用了,而且语法、内置函数都是标准通用。

    • 在Excel里用VBA+ADO+SQL我用到的其实就那几板斧。SQL本身没问题,是Excel里的SQL很有问题。建个数据库提升速度这是肯定的,但就那几千行的不规则Excel散表,还得考虑同一堆数据资源得经过坚果云同步,得在几台不一样的电脑上使用,要每个电脑都数据库,每个人都操作那套东西有点过分了。
      至于python,我就喜欢原始版本的python。
      我始终觉得,只要技术够,任何工具都能做出同样的效果,问题只是码字的难以程度有明显区别。因为我居然觉得VBA的SQL写多了我越发理解Power Query的思路。
      至于为什么必须是VBA而不是python解决Excel的问题,因为在控制输出表格格式方面python只能调用Excel的api,多一种格式速度就慢不少,VBA在操控Excel自己的格式上有原生的优势。八股的东西就是要你某些特定格式输出,我自己也觉得某些格式输出我才看得爽这是无法改变的。

有话要说

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

© 2004 - 2024 我的天 | Theme by xrspook | Power by WordPress