Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.01.10;
Скачать: [xml.tar.bz2];




Вниз

любопытное поведение union all в SQL через BDE... 


WildWind   (2001-12-07 10:48) [0]

Динамически формирую запрос. Получаю:

select nt, count(*) as cnt, sum(pr) as sum_pr, sum(sm)/100 as sum_sm
from "base_1.dbf" a
where (a.nt=4200)
group by nt
union all
select nt, count(*) as cnt, sum(pr) as sum_pr, sum(sm)/100 as sum_sm
from "base_2.dbf" a
where (a.nt=4200)
group by nt
order by nt

Мало того, что этот диалект требует, чтобы where был именно
после from (т.е. до group и order), так он еще и обрабатывается хитро!
По идее (и, например, в FoxPro так и есть) должна получиться одна строка, где nt=6044200 и дальше как заказывали. Но эта гадина выдает количество строк столько, сколько раз будет union all (в данном примере - две). Т.е. при включении в запрос еще одной базы по union я получаю уже 3 строки. Грешил на count(*), но дело не в нем.

Как победить, чтобы не делать промежуточную базу?
Хотя скорее всего так и придется... :(



Desdechado   (2001-12-07 11:23) [1]

BDE тут ни причем. Это совершенно правильное поведение, описанное в стандарте SQL. А вот Fox использует (придумал?) какой-то недоSQL со своими приколами



WildWind   (2001-12-07 13:25) [2]

Вот она, сила привычки... ;)

Значит в лоб никак? Надо промежуточную базу создавать?



Alexandr   (2001-12-07 15:03) [3]

2 строки и должно быть
хочешь одной строкой (т.е. объединить однаковые стери слово all, остальное оставь) и будет тебе счастье



asafr   (2001-12-07 16:13) [4]

Действительно, используй не UNION ALL, а просто UNION



WildWind   (2001-12-07 17:49) [5]

Убирал я ALL из UNION... а счастья так и нет.

Похоже, что Desdechado прав, но уж больно неуклюжая конструкция выходит. Как-то нелогично...



Dim666   (2001-12-07 18:01) [6]

А ты его в такую штуку оберни:


SELECT DISTINCT *
FROM (



)

:)



WildWind   (2001-12-10 09:35) [7]

2Dim666
Эта мысль была у меня самой первой ;)
Изящно, но не работает! :(




Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.01.10;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.014 c
1-28495           dimonf                2001-12-22 21:49  2002.01.10  
Ноаод, у меня вопрос как не выводит TPanel на ScrollBox?


1-28488           ilysha                2001-12-20 10:00  2002.01.10  
В дочерних окнах из DLL не работают


1-28472           Delphig               2001-12-22 03:16  2002.01.10  
Вот такая штука. Нужно чтобы при выборе в ListBox строчки....


1-28505           ctapik-net            2001-12-23 09:44  2002.01.10  
Как массив типа Array Of Array Of String сохранить в TMemoryStream и обратно?


6-28513           dimen                 2001-10-15 02:19  2002.01.10  
исходник копмпоненты http или как организовать его...