Текущий архив: 2006.07.23;
Скачать: CL | DM;
Вниз
Запрос на объединение Найти похожие ветки
← →
V-A-V © (2006-05-18 07:39) [0]Доброе всем время суток.
Народ подскажите как можно попороть ошибку?
Есть запрос на объединение, вот текст
Select 0 as SNGDR, 0 as SNGKR, Sum(Summa) as SDR, 0 as SKR
From MB_2006
Where ((Left(Account,2)="51") or (Left(Account,4)="51")) and
(Left(AccountK,2)<>"00") and (Data < {03/31/2006})
Union All
Select 0 as SNGDR, 0 as SNGKR, 0 as SDR, Sum(Summa) as SKR
From MB_2006
Where ((Left(AccountK,2)="51") or (Left(AccountK,4)="51")) and
(Left(Account,2)<>"00") and (Data < {03/31/2006})
По отдельности каждый из них отрабатывает отлично, а вот при объединении кидает ошибку:
Поставщик данных или другая служба вернули состояние E_FAIL
Как это бобороть ума не приложу!
← →
ЮЮ © (2006-05-18 10:54) [1]0 as SKR в первом запросе и Sum(Summa) as SKR во втором, естественно, разного типа. Приведи 0 к типу поля Summa
← →
Johnmen © (2006-05-18 11:03) [2]Возможно, будет достаточно указывать 0.0 вместо 0
← →
sniknik © (2006-05-18 11:29) [3]> ((Left(Account,2)="51") or (Left(Account,4)="51"))
второе условие это частный случай первого (т.е. второе сдесь бессмысленно, раз есть проверка первого)
на Data есть индекс? поставь условие (Data < {03/31/2006}) первым, на всякий случай... остальные вычисляемые, индекс не используют даже если есть, т.е. если используемый sql движок "глупый", без анализа/плана выражения, то в этом случае по твоему будет полный скан таблици.
по ошибке: поставь в первом запросе вместо 0 например Sum(0) т.к. 0 константа и возможно поле получает признак "константности"/ридонли а у тебя после этому полю со второго рекордсета другая сумма "пристегивается".
← →
V-A-V © (2006-05-18 12:00) [4]Благодарю за помощь. Вот в таком виде все работает.
Select Sum(0.00) as SNGDR, Sum(0.00) as SNGKR, Sum(Summa) as SDR, Sum(0.00) as SKR
From mb_2006
Where (Data < {04/20/2006}) and
((Left(Account,2)="51") or (Left(Account,4)="51")) and
(Left(AccountK,2)<>"00")
Union All
Select Sum(0.00) as SNGDR, Sum(0.00) as SNGKR, Sum(0.00) as SDR, Sum(Summa) as SKR
From mb_2006
Where (Data < {04/20/2006}) and
((Left(AccountK,2)="51") or (Left(AccountK,4)="51")) and
(Left(Account,2)<>"00")
← →
sniknik © (2006-05-18 12:09) [5]> (Left(Account,2)="51") or (Left(Account,4)="51")
предлагаю еще помедитировать над этой конструкцией... дополнительно, "до просветления"
← →
Johnmen © (2006-05-18 12:37) [6]
> V-A-V © (18.05.06 12:00) [4]
А без Sum не работает?
← →
V-A-V © (2006-05-18 12:58) [7]без Sum не работает!
← →
V-A-V © (2006-05-18 13:00) [8]> (Left(Account,2)="51") or (Left(Account,4)="51")
>предлагаю еще помедитировать над этой конструкцией... дополнительно, "до просветления"
не, не получится
значение 51 - это переменная длиной 2 или 4 цифири
← →
sniknik © (2006-05-18 13:15) [9]> без Sum не работает!
тогда во втором запросе Sum у констант лишнее, если получается я прав, формат полей определяется первым запросом.
> значение 51 - это переменная длиной 2 или 4 цифири
обрезаные слева (Left) 2 символа, в любом случае дадут не больше 2 "цифирей".
говорю же, частный случай. или убери это обрезание, а т.к. это вычисление то убрав его заставиш индекс работать (если он есть).
равнозначный твоему запрос, должон работать, причем чуток быстрееSelect 0 as SNGDR, 0 as SNGKR, Sum(Summa) as SDR, Sum(0) as SKR
From mb_2006
Where Data < {04/20/2006} and (Left(Account,2)="51" and Left(AccountK,2)<>"00"
Union All
Select 0, 0, 0, Sum(Summa)
From mb_2006
Where Data < {04/20/2006} and Left(AccountK,2)="51") and Left(Account,2)<>"00"
← →
sniknik © (2006-05-18 13:18) [10]нда, не все кавычки убрал, уточнение
Select 0 as SNGDR, 0 as SNGKR, Sum(Summa) as SDR, Sum(0) as SKR
From mb_2006
Where Data < {04/20/2006} and Left(Account,2)="51" and Left(AccountK,2)<>"00"
Union All
Select 0, 0, 0, Sum(Summa)
From mb_2006
Where Data < {04/20/2006} and Left(AccountK,2)="51" and Left(Account,2)<>"00"
Страницы: 1 вся ветка
Текущий архив: 2006.07.23;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.01 c