Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.07.23;
Скачать: [xml.tar.bz2];

Вниз

Запрос на объединение   Найти похожие ветки 

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.013 c
15-1150980642
Юрий
2006-06-22 16:50
2006.07.23
Общение с клиентным скриптом. Как организовать?


4-1144676395
kingdom
2006-04-10 17:39
2006.07.23
LCD антиалиасинг


2-1151953146
Yegorchic
2006-07-03 22:59
2006.07.23
Длина и высота TListView.Item


15-1150987302
ПЛОВ
2006-06-22 18:41
2006.07.23
Где-то видел такое...


1-1149600174
Тфьу
2006-06-06 17:22
2006.07.23
Не нашел, как получить картинку TChart а...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский