Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Как эффективнее выбрать числовую последовательность / 15 сообщений из 15, страница 1 из 1
07.11.2006, 20:31
    #34110352
A.K.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как эффективнее выбрать числовую последовательность
Необходимо, чтобы запрос (ASA 8.0.3) возвращал последовательность чисел (к примеру, от 1 до 40). Какое решение будет самым элегантным?
Напрашивается вариант:
авторselect top 40 number(*) from <sometable>
вот только как гарантировать, что <sometable> будет иметь не меньше 40 строк? Что лучше взять за <sometable>? Или есть другие варианты?
...
Рейтинг: 0 / 0
07.11.2006, 20:38
    #34110355
DenisBocharic
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как эффективнее выбрать числовую последовательность
select row_num as N
from dbo.RowGenerator
where N<=40
...
Рейтинг: 0 / 0
07.11.2006, 20:49
    #34110364
Марсель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как эффективнее выбрать числовую последовательность
RowGenerator в asa 9.0.2 появилась вроде
...
Рейтинг: 0 / 0
07.11.2006, 20:58
    #34110375
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как эффективнее выбрать числовую последовательность
МарсельRowGenerator в asa 9.0.2 появилась вродеВ whatsnew 9.0.2 есть запись:
авторsa_rowgenerator procedure The sa_rowgenerator system procedure is provided as an alternative to the RowGenerator table for returning a result set with rows between a specified start and end value.

You can use this procedure for such tasks as generating a result set with rows for every value in a range or generating test data for a known number of rows in a result set.А вот когда появилась таблица RowGenerator - увы, не скажу.
...
Рейтинг: 0 / 0
07.11.2006, 21:20
    #34110403
Марсель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как эффективнее выбрать числовую последовательность
точно, извините
паникую и ввожу людей в заблуждение ...
...
Рейтинг: 0 / 0
07.11.2006, 21:21
    #34110406
A.K.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как эффективнее выбрать числовую последовательность
Увы - нет в ASA 8.0.3 ни таблицы такой, ни процедуры.
Еще варианты?
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
07.11.2006, 21:26
    #34110410
Марсель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как эффективнее выбрать числовую последовательность
у меня на 7.0.4 работает
или я что-то путаю ...
...
Рейтинг: 0 / 0
07.11.2006, 21:30
    #34110417
A.K.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как эффективнее выбрать числовую последовательность
Я на sa_r... вижу только sa_read_backup_history и sa_reset_identity (
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
07.11.2006, 22:02
    #34110447
Dim2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как эффективнее выбрать числовую последовательность
A.K. wrote:

> Увы - нет в ASA 8.0.3 ни таблицы такой, ни процедуры.

Есть. Тестировал ответ от DenisBocharic на 8.0.3.5426 - работает.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
07.11.2006, 22:06
    #34110451
A.K.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как эффективнее выбрать числовую последовательность
> Автор: Dim2000
> Есть. Тестировал ответ от DenisBocharic на 8.0.3.5426 - работает.
>
Да, тупанул немножко. Процедуры нет, а таблица RowGenerator есть. Всем спасибо.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
08.11.2006, 09:52
    #34111007
Vinogradov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как эффективнее выбрать числовую последовательность
DenisBocharicselect row_num as N
from dbo.RowGenerator
where N<=40

Прекраcная функция(сисстемеая таблица), а вот как быть если надо больше чем 255? Конечно можно пользоваться функцией number(*), что и делаю, но при этом надо иметь какую то заполненную таблицу с большим количеством записей или перчислять несколько
...
Рейтинг: 0 / 0
08.11.2006, 10:02
    #34111032
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как эффективнее выбрать числовую последовательность
VinogradovПрекраcная функция(сисстемеая таблица), а вот как быть если надо больше чем 255? А что мешает сделать декартово поризведение этой таблицы на саму себя? В итоге будем иметь N^M (N в степени M) число строк, где N - число строк в таблице, M - количество самообъединений...

То есть, для таблицы с числом строк = 255 запрос вида:
Код: plaintext
select * from <table_name> t1 cross join <table_name> t2
вернет 65025 строк...
...
Рейтинг: 0 / 0
08.11.2006, 10:32
    #34111149
vinogradov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как эффективнее выбрать числовую последовательность
Щукина Анна VinogradovПрекраcная функция(сисстемеая таблица), а вот как быть если надо больше чем 255? А что мешает сделать декартово поризведение этой таблицы на саму себя? В итоге будем иметь N^M (N в степени M) число строк, где N - число строк в таблице, M - количество самообъединений...

То есть, для таблицы с числом строк = 255 запрос вида:
Код: plaintext
select * from <table_name> t1 cross join <table_name> t2
вернет 65025 строк...
Так и делаю, но а если при установке системы таблицы пустые?
...
Рейтинг: 0 / 0
08.11.2006, 11:05
    #34111283
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как эффективнее выбрать числовую последовательность
vinogradovТак и делаю, но а если при установке системы таблицы пустые?А зачем Вам вообще таблицы?
Вот такое представление сделайте:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
select (v1_100.rn_100 -  1 ) *  100  + v2_100.rn_100 as rn_10000
  from (
          select (v1.rn -  1 ) *  10  + v2.rn as rn_100
            from (
                   select  1  as rn union all
                   select  2  as rn union all
                   select  3  as rn union all
                   select  4  as rn union all
                   select  5  as rn union all
                   select  6  as rn union all
                   select  7  as rn union all
                   select  8  as rn union all
                   select  9  as rn union all
                   select  10  as rn
                 ) v1
           cross join
                 (
                   select  1  as rn union all
                   select  2  as rn union all
                   select  3  as rn union all
                   select  4  as rn union all
                   select  5  as rn union all
                   select  6  as rn union all
                   select  7  as rn union all
                   select  8  as rn union all
                   select  9  as rn union all
                   select  10  as rn
                 ) v2
      ) v1_100,
      (
          select (v1.rn -  1 ) *  10  + v2.rn as rn_100
            from (
                   select  1  as rn union all
                   select  2  as rn union all
                   select  3  as rn union all
                   select  4  as rn union all
                   select  5  as rn union all
                   select  6  as rn union all
                   select  7  as rn union all
                   select  8  as rn union all
                   select  9  as rn union all
                   select  10  as rn
                 ) v1
           cross join
                 (
                   select  1  as rn union all
                   select  2  as rn union all
                   select  3  as rn union all
                   select  4  as rn union all
                   select  5  as rn union all
                   select  6  as rn union all
                   select  7  as rn union all
                   select  8  as rn union all
                   select  9  as rn union all
                   select  10  as rn
                 ) v2
      ) v2_100
и будет Вам "виртуальная таблица" с 10000 строками.
Кол-во строк можно сделать любым, в пределах возможностей Вашего сервера...
...
Рейтинг: 0 / 0
08.11.2006, 17:58
    #34113475
Vinogradov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как эффективнее выбрать числовую последовательность
Щукина Анна vinogradovТак и делаю, но а если при установке системы таблицы пустые?А зачем Вам вообще таблицы?
Вот такое представление сделайте:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
select (v1_100.rn_100 -  1 ) *  100  + v2_100.rn_100 as rn_10000
  from (
          select (v1.rn -  1 ) *  10  + v2.rn as rn_100
            from (
                   select  1  as rn union all
                   select  2  as rn union all
                   select  3  as rn union all
                   select  4  as rn union all
                   select  5  as rn union all
                   select  6  as rn union all
                   select  7  as rn union all
                   select  8  as rn union all
                   select  9  as rn union all
                   select  10  as rn
                 ) v1
           cross join
                 (
                   select  1  as rn union all
                   select  2  as rn union all
                   select  3  as rn union all
                   select  4  as rn union all
                   select  5  as rn union all
                   select  6  as rn union all
                   select  7  as rn union all
                   select  8  as rn union all
                   select  9  as rn union all
                   select  10  as rn
                 ) v2
      ) v1_100,
      (
          select (v1.rn -  1 ) *  10  + v2.rn as rn_100
            from (
                   select  1  as rn union all
                   select  2  as rn union all
                   select  3  as rn union all
                   select  4  as rn union all
                   select  5  as rn union all
                   select  6  as rn union all
                   select  7  as rn union all
                   select  8  as rn union all
                   select  9  as rn union all
                   select  10  as rn
                 ) v1
           cross join
                 (
                   select  1  as rn union all
                   select  2  as rn union all
                   select  3  as rn union all
                   select  4  as rn union all
                   select  5  as rn union all
                   select  6  as rn union all
                   select  7  as rn union all
                   select  8  as rn union all
                   select  9  as rn union all
                   select  10  as rn
                 ) v2
      ) v2_100
и будет Вам "виртуальная таблица" с 10000 строками.
Кол-во строк можно сделать любым, в пределах возможностей Вашего сервера...
Спасибо
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Как эффективнее выбрать числовую последовательность / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]