![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как получить все комбинации в запросе? [D6, FireBird]
sanich © (2006-03-14 10:12:00)Всем привет. Есть таблица с полями Х1, Х2, Х3. Как получить из нее представление, в котором будут представлены все комбинации значений полей Х1 и Х2.
Я пробовал вариант
select t.X1, t. X2
from table t, table tt
Но это не выход - уже при 100 записях в результате получаем 10000 записей в представлении? Как быть? Может кто знает выход?
Sergey13 (2006-03-14 13:10:00) [1]217] sanich © (14.03.06 13:02)
>Надо эту байду всю вывести в FastReport
Сам я этого не делал, но в FastReport есть возможность построения крос-отчета, и насколько я помню из документации, это не требует построения крос-датасета.
sanich (2006-03-14 13:02:00) [2]Для чего? Надо эту байду всю вывести в FastReport в Cross - отчет. Есть еще одно поле S - сума. Вот и получается, что необходимо построчно выводить суму по датам а по столбцам суму по коду. Вот и надо мне, чтобы по каждой комбинации число-код была сума. Где ее нету - выйдет просто 0.
Sergey13 (2006-03-14 12:58:00) [3]2[14] sanich © (14.03.06 12:53)
>А мне надо получить все возможные комбинации
Иногда (но довольно часто) просто кажется, что надо. Если объяснишь конечную цель сего действа, может и переубедим. 8-)
Anatoly Podgoretsky (2006-03-14 12:56:00) [4]А CROSS JOIN есть в FireBird?
sanich (2006-03-14 12:53:00) [5]Это все очень печально. А мне надо получить все возможные комбинации, сократив при этом общее время выполнения запроса.
Desdechado (2006-03-14 12:29:00) [6]если речь пошла о комбинациях, то это комбинаторика
а в ней, как известно, мало не бывает
Anatoly Podgoretsky (2006-03-14 12:17:00) [7]sanich © (14.03.06 10:12)
А что же ты хотел еще, 100*100 = 10 000
Плохиш (2006-03-14 11:21:00) [8]
> sanich © (14.03.06 11:16) [10]
> а запрос
> select distinct t.X1, t. X2
> from table t, table tt
> Возвращает 441 записей. Но выполняется ОЧЕНЬ долго :(
Поставить новый процессор на сервер, довести количество процессоров и памяти до бесконечности, поставить супер быстрый накопитель. Ты что думаешь, что сервер твой запрос не обрабатывает?
sanich (2006-03-14 11:16:00) [9]
> Тебя не поймешь, то тебе мало и хочется даже того, чего
> нет в таблрице, то слишком много
Да, и вправду, я наверное не умею обяснить.
Значения полей X1 и Х2 часто повторяются. Например сейчас у меня есть 297 записей, а запрос
select distinct t.X1, t. X2
from table t, table tt
Возвращает 441 записей. Но выполняется ОЧЕНЬ долго :(
ЮЮ (2006-03-14 11:07:00) [10]select DISTINCTt.X1, tt. X2
from table t, table tt
Но это не выход - уже при 100 записях в результате получаем 10000 записей в представлении?
Выполни, если сервер позволяет,
select Count(DISTINCT X1)
from table t
или подсчитай сколько возвращает запись запрос
select DISTINCT X1
from table t
и умножь на аналгичное:
select Count(DISTINCT X2)
from table t
Именно столько представление и должно вернуть.
Тебя не поймешь, то тебе мало и хочется даже того, чего нет в таблрице, то слишком много
Reindeer Moss Eater (2006-03-14 11:03:00) [11]>Мне надо получить в представлении
select t1.x1, t2.x2
from tablename t1, tablename t2
Reindeer Moss Eater (2006-03-14 11:02:00) [12]Поля Х1 и Х2 не одинакового типа. Х1- dataTime, X2 - numeric (4,0)
Ну значит добавь другое условие, что бы исключить симметричные комбинации если они тебе не нужны.
Если нужны, оставь просто декартово произведение таблицы на саму себя.
sanich (2006-03-14 11:02:00) [13]Ну например.
X1 X2
01.01 1
12.12 3
Мне надо получить в представлении
X1 X2
01.01 1
01.01 3
12.12 1
12.12 3
Sergey13 (2006-03-14 10:55:00) [14]2[4] sanich © (14.03.06 10:48)
> Ты не понял,
Как спросил так и понял.
> надо получить даже те комбинации, которые не встречаются в таблице.
Это как?
sanich (2006-03-14 10:48:00) [15]
> Sergey13
Ты не понял, надо получить даже те комбинации, которые не встречаются в таблице.
> Reindeer Moss Eater
Поля Х1 и Х2 не одинакового типа. Х1- dataTime, X2 - numeric (4,0)
Reindeer Moss Eater (2006-03-14 10:16:00) [16]select t1.x1, t2.x2
from tablename t1, tablename t2
where t1.x1 > t2.x2
Sergey13 (2006-03-14 10:16:00) [17]Или (с количеством записей в данной комбинации)
select t.X1, t. X2, count(*)
from table t
Group By t.X1, t. X2
Sergey13 (2006-03-14 10:13:00) [18]
select distinct t.X1, t. X2
from table t