Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.49 MB
Время: 0.027 c
2-1151843884
S-Slim
2006-07-02 16:38
2006.07.23
надо копировать DB файл!


2-1149947049
TGX
2006-06-10 17:44
2006.07.23
Низкоуровневый доступ к файлу


2-1151918291
salexn
2006-07-03 13:18
2006.07.23
MessageBox и зависание программы


15-1150971029
Rentgen
2006-06-22 14:10
2006.07.23
Компонент-печать-мм


15-1150983500
QuasiLamo
2006-06-22 17:38
2006.07.23
MS Outlook - создание правил