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