1

次のコードがあります。目的は、特定の期間中に会社を辞めた各グループの従業員の数を数えることです。COUNT IIF を使用していますが、コードの各ビットの AND の後の <= 記号が間違っています。日付範囲をカウントするにはどうすればよいですか?

    SELECT O867IA_VPJOBCO.JOB_GRP_CD, Count(IIf(O867IA_VJOBHST.REC_EFF_STT_DT>=#1/1/2009# And <= #12/31/2009#,2009,0)) AS 2009, Count(IIf(O867IA_VJOBHST.REC_EFF_STT_DT>=#1/1/2010# And <= #12/31/2010#,2010,0)) AS 2010, COUNT(IIF(O867IA_VJOBHST.REC_EFF_STT_DT >= #1/1/2011# AND <= #12/31/2011#, 2011, 0)) AS 2010, COUNT(IIF(O867IA_VJOBHST.REC_EFF_STT_DT >= #1/1/2012# AND <= #12/31/2012#, 2012, 0)) AS 2012,
FROM (O867IA_VJOBHST INNER JOIN O867IA_VACTRSN ON (O867IA_VJOBHST.EMP_ACN_RSN_TYP_CD = O867IA_VACTRSN.EMP_ACN_RSN_TYP_CD) AND (O867IA_VJOBHST.EMP_ACN_TYP_CD = O867IA_VACTRSN.EMP_ACN_TYP_CD)) INNER JOIN O867IA_VPJOBCO ON O867IA_VJOBHST.JOB_CLS_CD = O867IA_VPJOBCO.JOB_CLS_CD
WHERE (((O867IA_VJOBHST.REC_EFF_STT_DT)>=#1/1/2009# And (O867IA_VJOBHST.REC_EFF_STT_DT)<=#12/31/2012#) AND ((O867IA_VACTRSN.EMP_ACN_TYP_CD)<>"RMT"))
GROUP BY O867IA_VPJOBCO.JOB_GRP_CD
HAVING (((O867IA_VPJOBCO.JOB_GRP_CD)>='72' And (O867IA_VPJOBCO.JOB_GRP_CD)<='94'));
4

2 に答える 2

1

例として、最初の計算列を取り上げました。

Count(IIf(O867IA_VJOBHST.REC_EFF_STT_DT>=#1/1/2009# And <= #12/31/2009#,2009,0))

これらの場合でSumはなく、メソッドが必要だと思います。これを見てください:Count

Sum(IIf([O867IA_VJOBHST].[REC_EFF_STT_DT] BETWEEN #1/1/2009# And #12/31/2009#,1,0))
于 2013-01-16T14:26:22.293 に答える
1

問題のある表現から始めます。

O867IA_VJOBHST.REC_EFF_STT_DT>=#1/1/2009# And <= #12/31/2009#

次に、それを単純化します (ここでは、上記の式の a1、a2、および b2 を置き換えました)。

a1 >= a2 And <= b2

意図を示す括弧を入れます (これはパーサーが行うことではありませんが、ここで問題を特定するのに役立ちます)。

(a1 >= a2) And (<= b2)

うーん。いいえ、(<= b2)まったく正しくないように見えます.. (ヒント: 形式の有効な式を条件とする HAVING 句を見てくださいa1 >= a2 And b1 <= b2。)

また、この条件を記述する別の/よりクリーンな方法については、 BETWEEN演算子を参照してください。

于 2013-01-15T19:59:13.797 に答える