0

私は2年以上前に私の役職に就いていた人のコードに取り組んでおり、SQLコードのブロックを解読するのに問題があります。

WHERE  ACCOUNT NOT IN (SELECT ACCOUNT
                   FROM   MWAPPTS A1
                   WHERE  A1.ACCOUNT = A.ACCOUNT
                          AND ADATE > dbo.Endofmonth(ACTIONDATE)
                          AND REASON IN ('CPE','NPPE')
                          AND USERFLAG IN ( 'U', 'B' ))

dbo.Endofmonth入力された日付の月末日を取得するストアドプロシージャです。

私がその権利を読んでいる場合、表示されているselectステートメントによってアカウントが返される行は含まれていません。ただし、selectステートメントに問題があります。月末より古いACCOUNTところに来ているのは正しいですか。ADATE理由は「CPE」または「NPPE」であり、USERFLAG「U」または「B」のいずれかですか?

4

2 に答える 2

1

はい、アカウントに次のものがないレコードを返します。

1)ADATE関数によって返される日付よりも大きいdbo.Endofmonth(ACTIONDATE)

2)ReasonそれはCPE or NPPE

3)そしてUserflagどちらかU or Bです。

関数内のコードを調べて、dbo.Endofmonth(ACTIONDATE)何が返されるかを正確に判断する必要があります。

于 2012-07-27T20:03:46.540 に答える
1

ADATEが月末より古いアカウントを取得しているのは正しいですか。

内部自体は、から月末以降のエントリをSELECT探しています。次に、アウターのは、アカウントのが月末である行を取得する必要があります。ADATEACTIONDATENOT INSELECTADATE<=ACTIONDATE

あなたの他の仮定は正しいようです。

余談ですが、これdbo.Endofmonthはユーザー定義関数であり、ストアドプロシージャではないようです(または、そのように呼び出すことはできません)。

于 2012-07-27T20:05:08.720 に答える