【问题标题】:Use IFS() to switch between query statements使用 IFS() 在查询语句之间切换
【发布时间】:2017-10-18 19:04:07
【问题描述】:

我正在尝试通过查询填写网格区域。但我希望这个查询根据下拉列表的选择而改变。我有三个不同的查询,我希望它们根据下拉列表进行交换。

我正在尝试使用 IFS 在如下查询之间切换:

=iferror(
    IFS(B9="Value",
               query(LOG!A4:U,"SELECT A, B, C, D, E, F, G, H, I, J, K WHERE A Is Not Null " 
               & IF(ISBLANK(B4),"", " AND K='"& LEFT(B4,7) &"'") & " " 
               & IF(D6<>"ALL", " AND N ='"& D6 &"'", "") & " " 
               & IF(E6<>"ALL", " AND Q ='"& E6 &"'", "") & " " 
               & IF(F6<>"ALL", " AND P ='"& F6 &"'", "") & " " 
               & IF(G6<>"ALL", " AND O ='"& G6 &"'", "") & " " 
               & IF(H6<>"ALL", " AND R ='"& H6 &"'", "") & " " 
               & IF(I6<>"ALL", " AND S ="& I6, "") & " " 
               & IF(ISBLANK(J6), "", " AND T ='"& LEFT(J6,7) &"'") & " " 
               & IF(ISBLANK(H9), "", " AND C >= date '" & text(H9,"yyyy-MM-dd") & "'" ) & " " 
               & IF(ISBLANK(I9), "", " AND D <= date '" & text(I9,"yyyy-MM-dd") & "'" ) & " "
               ,-1),
            B9 = "value 2",
        "other query
,"NO RESULTS")

那么单元格的值不是查询的值,而是这个公式只返回B9的值。

有没有办法根据单元格的下拉选择执行不同的查询?

提前致谢

编辑 1:

=IFS(B9="WITHOUT COURSE"
   ,FILTER(PERSONNEL!A6:J
           ,(ISERROR(Match(PERSONNEL!A6:A,UNIQUE(filter(LOG!K4:K, VALUE(LOG!J4:J) = VALUE(RIGHT(B6,12)))),0)))
           , (PERSONNEL!F6:F = E6) + (E6 = "ALL") 
           , (D6 = "ALL") + (PERSONNEL!D6:D = D6)  
           , (F6 = "ALL") + (PERSONNEL!G6:G = F6)
           , (G6 = "ALL") + (PERSONNEL!E6:E = G6)
           , (H6 = "ALL") + (PERSONNEL!I6:I = H6)
           , (I6 = "ALL") + (PERSONNEL!H6:H = I6)
   )
   ,B9="WITH COURSE"
   ,query(LOG!A4:U,"SELECT A, B, C, D, E, F, G, H, I, J, K WHERE A Is Not Null " 
        & IF(ISBLANK(B4),"", " AND K='"& LEFT(B4,7) &"'") & " " 
        & IF(D6<>"ALL", " AND N ='"& D6 &"'", "") & " " 
        & IF(E6<>"ALL", " AND Q ='"& E6 &"'", "") & " " 
        & IF(F6<>"ALL", " AND P ='"& F6 &"'", "") & " " 
        & IF(G6<>"ALL", " AND O ='"& G6 &"'", "") & " " 
        & IF(H6<>"ALL", " AND R ='"& H6 &"'", "") & " " 
        & IF(I6<>"ALL", " AND S ="& I6, "") & " " 
        & IF(ISBLANK(J6), "", " AND T ='"& LEFT(J6,7) &"'") & " " 
        & IF(ISBLANK(H9), "", " AND C >= date '" & text(H9,"yyyy-MM-dd") & "'" ) & " " 
        & IF(ISBLANK(I9), "", " AND D <= date '" & text(I9,"yyyy-MM-dd") & "'" ) & " "
        & IF(ISBLANK(B6), "", " AND J ='"& RIGHT(B6,12) &"'") & " " 
        & IF(ISBLANK(B7), "", " AND L ='"& RIGHT(B7,12) &"'") & " "
        & IF(ISBLANK(B8), "", " AND M ='"& B8 &"'") & " " 
        & IF(B9 = "EXPIRES IN", " AND (DATEDIFF(now(), C) / 30) >= U AND U > 0 AND (DATEDIFF(now(), C) / 30) <= " &E9 & " " ,"")
    ,-1)
 )

【问题讨论】:

  • 你错过了分号:"other query"?
  • 我没有看到 ;在光学文档support.google.com/docs/answer/7014145?hl=en 中,如果我在其中添加一个,它会自动删除
  • 对不起,我的意思是在一个单词后面加双引号query"
  • @MaxMakhrov 感谢 Max,这只是粘贴到网站的错误,实际代码确实有它

标签: google-sheets


【解决方案1】:

如果您删除 iferror,您将看到错误消息:

错误

IFS 要求位置 0 之后的所有参数成对出现。

如果公式对值“NO RESULTS”给出错误,我猜你想设置默认值。如果没有它,该公式将有效,您更正括号:

=iferror(
    IFS(B9="Value",
             "some value",
         B9 = "value 2",
            "other query")
,"NO RESULTS")

【讨论】:

  • 感谢标记,由于某种原因,当我使用 IFS 时,查询应该返回 100 多行时只返回一行。查看我对新版本的编辑
猜你喜欢
  • 1970-01-01
  • 2012-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多