求助: 简单 sql 中的问题
😄 大佬们,中午好,发这个帖子有点小紧张(我怕老贼 diao 我😂),真心不想给大佬们添麻烦,哈哈,其实有了 spl 真就不用操心 sql 了,但有点意不平,想了好久还是求助一下,不是说 sql 有多好用,只是想着能在桌面版插件公式编辑栏写 sql 有点独特,可以吸引眼球 (实际上是我这种非科班小白装 x 用),废话不多说了,恳请大佬们得闲时帮忙看看以下问题:
1、比如以下统计个数,用了 with 语句,先得到两个表,然后再 left join,结果符合预期:
=spl("$with t1 as (select * from {E(?)}),t2 as (select Val, count(1) Cnt From t1 group by Val) select b.*, a.Cnt from t1 as b left join t2 a on a.Val=b.Val",B2:B7)
上述语句其实还可以简写成如下语句:
但目前在简单 sql 中跑不出结果,似乎同时出现多个 {E(?)} 会有问题:
=spl("$select Val,(select count(1) from {E(?)} where Val=b.Val) Cnt from {E(?)} b",B2:B7)
我想着换成 with 语句,但也出现了问题,插件中显示结果是空白或者报错如下:
=spl("$with t as (select * from {E(?)}) select Val,(select count(1) from t where Val=b.Val) Cnt from t b",B2:B7)
这个语句在 IDE 中的报错如下:
写成子查询也会有问题:
=spl("$select b.*, a.Cnt as 个数 from {E(?)} as b left join (select Val, count(1) Cnt From {E(?)} group by Val) a on a.Val=b.Val",B2:B7)
2、说到子查询,比如,以下语句用 with 写能出结果:
=spl("$with t as (select 门店,客户号,sum(金额) 金额 from {E(?)} group by 1,2 having sum(金额)<=500) select 门店,count(1) 数量 from t group by 门店",A1:C25)
换成子查询就报错了:
=spl("$select a.门店,count(1) 数量 from (select 门店,客户号,sum(金额) 金额 from {E(?)} group by 1,2 having sum(金额)<=500) a group by a.门店",A1:C25)
3、能不能直接写”$select ‘集算器’ as esProc",这个语句是没问题的,但跑不出结果。还有一个好像是函数嵌套的问题,时间太久了,我找不到例子了,等想起来再求助。
以上问题,恳请大佬们得闲时给予指导帮助,谢谢!
excel 示例文件如下,可放心下载↓:
1 简单 SQL 不支持带参数的子查询,这个实现麻烦度大得多,划不来。
2 应该是对的,可能参数处理的不对。
3 不支持,SQL 是没办法写单值只好写成这种怪样子。
早上好,老贼😄 感谢回复🙏
不管带参数的子查询了,是我没看懂文档,对 sql 也不熟,只会 select * from table😄
在公式编辑栏使用简单 sql,也只是为了吸引小白眼球 (握艹公式编辑栏能写 sql, 就这反应),实战就用 spl 了。
如果非要使用 sql,也可以绕过简单 sql,用 excel 的 odbc 驱动创建一个连接,就能使用支持 excel 的 sql 语句,比如这样: