Iif太多 - 表达式在查询表达式中过于复杂 - 替代解决方案?

时间:2016-06-02 10:14:44

标签: ms-access ms-access-2010 iif

我试图计算是否满足某个条件,在这种情况下如果RB为真,它应该计算它。 当我不得不使用一些Iif时,我已经按照它应该的方式工作了。

但是,以下示例超出了允许的Iif语句数量(在查询表达式中使表达式过于复杂)。

SELECT Sanering_af_hoved_og_stikledninger.LedningsID, Sanering_af_hoved_og_stikledninger.OpstroemKnudeID, Sanering_af_hoved_og_stikledninger.OpstrømsKnudeNavn, Sanering_af_hoved_og_stikledninger.Opstrømsdybde, Sanering_af_hoved_og_stikledninger.NedstroemKnudeID, Sanering_af_hoved_og_stikledninger.Nedstrømsdybde, Sanering_af_hoved_og_stikledninger.NedstrømsKnudeNavn, Sanering_af_hoved_og_stikledninger.Laengde, Sanering_af_hoved_og_stikledninger.Handelsmaal, Sanering_af_hoved_og_stikledninger.Materiale, Sanering_af_hoved_og_stikledninger.TVObsKode,

Count(IIf([TVObs].[TVObsKode]="RB",
True,IIf([TVObs].[TVObsKode]="OB",
True,IIf([TVObs].[TVObsKode]="PF",
True,IIf([TVObs].[TVObsKode]="DE",
True,IIf([TVObs].[TVObsKode]="FS",
True,IIf([TVObs].[TVObsKode]="IS",
True,IIf([TVObs].[TVObsKode]="RØ",
True,IIf([TVObs].[TVObsKode]="IN",
True,IIf([TVObs].[TVObsKode]="AF",
True,IIf([TVObs].[TVObsKode]="BE",
True,IIf([TVObs].[TVObsKode]="FO",
True,IIf([TVObs].[TVObsKode]="GR",
True,IIf([TVObs].[TVObsKode]="PH",
True,IIf([TVObs].[TVObsKode]="PB",
True,IIf([TVObs].[TVObsKode]="OS",
True,IIf([TVObs].[TVObsKode]="OP",
True,IIf([TVObs].[TVObsKode]="OK",
True,Null)))))))))))))))))) AS [Antal Observationer]

FROM Rorenes_tilstand, Sanering_af_hoved_og_stikledninger
GROUP BY Sanering_af_hoved_og_stikledninger.LedningsID, Sanering_af_hoved_og_stikledninger.OpstroemKnudeID, Sanering_af_hoved_og_stikledninger.OpstrømsKnudeNavn, Sanering_af_hoved_og_stikledninger.Opstrømsdybde, Sanering_af_hoved_og_stikledninger.NedstroemKnudeID, Sanering_af_hoved_og_stikledninger.Nedstrømsdybde, Sanering_af_hoved_og_stikledninger.NedstrømsKnudeNavn, Sanering_af_hoved_og_stikledninger.Laengde, Sanering_af_hoved_og_stikledninger.Handelsmaal, Sanering_af_hoved_og_stikledninger.Materiale, Sanering_af_hoved_og_stikledninger.TVObsKode
ORDER BY Sanering_af_hoved_og_stikledninger.LedningsID;

所以我的问题是,是否有另一种方法可以在不使用Iif的情况下执行我指定的操作?下图显示了数据表视图,该数据在Antal观察者中有所统计(当时只有少数Iif)

AccessDatasheet

1 个答案:

答案 0 :(得分:1)

您可以在[Antal Observationer]专栏中使用这样的内容:

Sum(IIf([TVObs].[TVObsKode] IN ("RB","OB","PF",..."OK"),1,0)) AS [Antal Observationer]

但最好将代码列表存储在单独的表中,并将主查询与此表连接