MS DAx 2009, KernelVersion: 5.0.1500.6491
MS SQL Server 2008 R2
Есть задача: найти проводку с корреспондирующей проводкой, по определенным условиям.
а) Запрос такой:
X++:
LedgerTrans ledgerTrans, ledgerTransCorr;
AmountCur amountCur = 36809351.98;
select ledgerTrans
where ledgerTrans.Voucher == "ОСЖ002243"
&& ledgerTrans.TransDate == 30\09\2011
&& ledgerTrans.AmountCur == amountCur
&& (ledgerTrans.AccountNum == "41.10159")
exists join ledgerTransCorr
where ledgerTransCorr.BondBatch_RU == ledgerTrans.BondBatch_RU
&& ledgerTransCorr.BondBatchTrans_RU == ledgerTrans.BondBatchTrans_RU
&& ledgerTransCorr.Crediting != ledgerTrans.Crediting
&& (ledgerTransCorr.AccountNum == "00.010");
Запрос проводку не находит.
б) Если выполнить запрос без поиска корреспонденции:
X++:
select ledgerTrans
where ledgerTrans.Voucher == "ОСЖ002243"
&& ledgerTrans.TransDate == 30\09\2011
&& ledgerTrans.AmountCur == amountCur
&& (ledgerTrans.AccountNum == "41.10159");
Этот запрос находит проводку X.
в) Если выполнить запрос без жесткого условия по сумме:
X++:
select ledgerTrans
where ledgerTrans.Voucher == "ОСЖ002243"
&& ledgerTrans.TransDate == 30\09\2011
&& ledgerTrans.AmountCur >= amountCur - 0.0001
&& ledgerTrans.AmountCur <= amountCur + 0.0001
//&& ledgerTrans.AmountCur == amountCur
&& (ledgerTrans.AccountNum == "41.10159")
exists join ledgerTransCorr
where ledgerTransCorr.BondBatch_RU == ledgerTrans.BondBatch_RU
&& ledgerTransCorr.BondBatchTrans_RU == ledgerTrans.BondBatchTrans_RU
&& ledgerTransCorr.Crediting != ledgerTrans.Crediting
&& (ledgerTransCorr.AccountNum == "00.010")
;
Этот запрос находит ту же самую проводку Х, что и в запросе б). То есть на самом деле есть 2 проводки по условиям запроса а). Сумму в БД проверял: 36809351.980000000000.
Получается система при запросе с 1 таблицей и с 2-мя по разному сравнивает суммы.
В чем может быть дело? У кого-нибудь есть какие-то соображения?