SQL:如果满足内部条件,则仅运行两个统计信息之一



不知道这里是否有人知道Tasker Android应用程序,但我认为每个人都可以在全球范围内理解我想要实现的目标,因为我基本上会谈论"原始"SQL代码,因为它是用大多数常用语言编写的。

首先,这就是我想要的,大致:

IF (SELECT * FROM ("january") WHERE ("day") = (19)) MATCHES [%records(#) = 1] END
ELSE
SELECT * FROM ("january") WHERE ("day") = (19)  ORDER BY ("timea") DESC END

我上面想说的是:如果在代码的第一部分(IF ...END( 结果记录的编号,与"天"列上的数字 19 匹配,仅为 1,在此处结束执行;但是,如果找到多个记录,请跳转到 ELSE 之后的下一部分。

如果您是 Tasker 用户,您将了解下一个(我当前的(设置:

A1: SQL Query [ Mode:Raw File:Tasker/Resources/Calendar Express/calendar_db Table:january Columns:day Query:SELECT * FROM ("january") WHERE ("day") = (19) Selection Parameters: Order By: Output Column Divider: Variable Array:%records Use Root:Off ] 
A2: SQL Query [ Mode:Raw File:Tasker/Resources/Calendar Express/calendar_db Table:january Columns:day Query:SELECT * FROM ("january") WHERE ("day") = (19)  ORDER BY ("timea") DESC Selection Parameters: Order By: Output Column Divider: Variable Array:%records Use Root:Off ] If [ %records(#) > 1 ]
An:...

因此,如您所见,A1 将始终运行,无一例外,在变量数组 '%records((' 中获取结果(% 是 Tasker 识别变量的方式,在其他语言中为 $;并使用括号而不是括号(。然后,如果数组内的条目数仅为 1,则将跳转 A2(如果 %records(#(> 1(,并执行以下操作。

但是,如果在运行 A1 后 %records(( 数组包含 3,则将执行 A2 操作,覆盖 %records(( 数组的内容,先前设置。但这次将包含相同数量的记录 (3(,但已重新排序。

是否可以在一个代码行中做到这一点?谢谢;)

正如"粘滞位"之前对评论的回复,我仍然可以使用第二个操作,因为如果它只是一条记录,它不会影响输出。解决!

最新更新