Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.25;
Скачать: CL | DM;

Вниз

Выражения в агрегатных функциях   Найти похожие ветки 

 
Nimfa ©   (2005-06-12 14:44) [0]

Помогите посчитать в таблице REG(Client, Tp, Vid) с помощью запроса сумму по полю TP, где Vid = ‘ТТ’ и в другом поле запроса сумму по полю TP, где Vid = ‘TNP’. Group by по полю Client.
Пробовала писать: sum(case where Vid = "TT" then TP else 0 end) -не работает.


 
Zacho ©   (2005-06-12 20:06) [1]

1. В IB нет case. Да для этой цели и не нужно.
2. RTFM WHERE

P.S. Как ты думаешь, здесь телепаты собрались ? Или всё-таки вместо "не работает" стоит написать как именно не работает ?


 
Nimfa ©   (2005-06-13 11:47) [2]

Ну раз case в IB нет, то и ошибка очевидна: Invalid keyword. Token:when. Тогда почему when, а не case?
И можно по подробней про "RTFM WHERE"?


 
Zacho ©   (2005-06-13 11:53) [3]

Nimfa ©   (13.06.05 11:47) [2]
то и ошибка очевидна:


Это ещё не повод, что бы её не приводить. А вдруг ситуация была бы не такой очевидной ?
Кстати, case есть в FB 1.5

Nimfa ©   (13.06.05 11:47) [2]
И можно по подробней про "RTFM WHERE"?


Насколько я понял твой вопрос, никакие case тебе не нужны, а нужен простой запрос:

SELECT SUM(TP) FROM REG WHERE VID="TT" GROUP BY CLIENT


 
Anatoly Podgoretsky ©   (2005-06-13 12:00) [4]

Zacho ©   (13.06.05 11:53) [3]
Гыы, так она же хочет
SELECT SUM(TP WHERE VID="TT") as S1,  SUM(TP WHERE VID="TNP")  as S2 FROM REG GROUP BY CLIENT


 
Zacho ©   (2005-06-13 12:09) [5]

Извеняюсь, был не прав, невнимательно прочитал вопрос,


 
Zacho ©   (2005-06-13 12:24) [6]

Вот решения:
1. Для IB 6.x

select distinct R.CLIENT,
(SELECT SUM(R2.TP) FROM REG R2 WHERE R2.CLIENT=R.CLIENT and R2.VID="TT"),
(SELECT SUM(R3.TP) FROM REG R3 WHERE R3.CLIENT=R.CLIENT and R3.VID="TNP")
FROM REG R


2. Для FB 1.5

SELECT
 R.CLIENT,
 SUM(CASE R.VID WHEN "TT" THEN R.TP ELSE 0 END),
 SUM(CASE R.VID WHEN "TNP" THEN R.TP ELSE 0 END)
FROM REG R
GROUP BY R.client


 
Anatoly Podgoretsky ©   (2005-06-13 12:32) [7]

Не завидую, для первого будет декартово произведение, для второго полное сканирование таблицы, ты правда тут ни причем :-)
Не знаю задачи, но если допустимо, то два независимых запроса с отдельными датасет, при желании результат куда ни будь, в массив, в ClientDataSet и т.д.


 
Zacho ©   (2005-06-13 15:45) [8]

Anatoly Podgoretsky ©   (13.06.05 12:32) [7]
Не завидую, для первого будет декартово произведение


Где ??? Или под "декартовым произведением" я понимаю что-то другое ?

> для второго полное сканирование таблицы

Возможно. А может и нет. Я не знаю, как работает оптимизатор FB 1.5

А, вообще, согласен, запрос будет довольно медленный в обоих случаях. Я бы сделал двумя запросами или ХП.


 
Anatoly Podgoretsky ©   (2005-06-13 15:57) [9]

Для каждого R.CLIENT будет вызывать подзапрос, точнее даже два.

По второму случаю придется просмотреть всю таблицу, поскольку во WHERE не удастся включить два независимых условия.


 
Zacho ©   (2005-06-13 16:18) [10]

Anatoly Podgoretsky ©   (13.06.05 15:57) [9]
Для каждого R.CLIENT будет вызывать подзапрос, точнее даже два.


Естествнно, но это не декартово произведение, это аналог внешнего соединения трёх таблиц. Кстати, этот запрос вполне можно написать с LEFT JOIN.

Anatoly Podgoretsky ©   (13.06.05 15:57) [9]
По второму случаю придется просмотреть всю таблицу


Скорее всего именно так. Согласен.
Но точно не знаю, и проверить сейчас не могу :)


 
Anatoly Podgoretsky ©   (2005-06-13 16:31) [11]

Декартово, в смысле что будет Client*Client расчетов, а не Client*Client записей


 
Zacho ©   (2005-06-13 16:36) [12]

Anatoly Podgoretsky ©   (13.06.05 16:31) [11]

Это да, сразу не понял, был (и есть) несколько нетрезв :)


 
Anatoly Podgoretsky ©   (2005-06-13 17:03) [13]

С празником :-)



Страницы: 1 вся ветка

Текущий архив: 2005.07.25;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.036 c
1-1120377854
VadimX
2005-07-03 12:04
2005.07.25
Помогите оптимизировать код


1-1120543864
sergg
2005-07-05 10:11
2005.07.25
При запуске на другой ЭВМ приложению не хватает qtintf70.dll


9-1112782104
lifo
2005-04-06 14:08
2005.07.25
правельная отрисовка формулы


14-1120074812
ArMellon
2005-06-29 23:53
2005.07.25
Что есть Эгоизм?


14-1120200294
Sha
2005-07-01 10:44
2005.07.25
Пятница - задача - снова монеты