![]() |
|
Получить в результате запроса список цифр от 1 до к | ☑ | ||
---|---|---|---|---|
0
FarFar
08.11.06
✎
17:05
|
Доброе время суток!
Конкурс: Мне необходим был запрос, выдающий список цифр от 1 до к(параметр). Сейчас я выбираю из справочника "Города" (УТ) коды городов. А есть ли более простой, изящный способ? Заранее спасибо, FarFar |
|||
1
Salvador Limones
08.11.06
✎
17:07
|
Каша какая-то! Цифры и коды городов!
|
|||
2
FarFar
08.11.06
✎
17:08
|
код города - имеет тип число. Поэтому всё работает. Умный Salvador - подскажи, как по другому...
|
|||
3
FarFar
08.11.06
✎
17:09
|
P.S. коды - не телефонные, а порядковые, которые автонумерацией задаются
|
|||
4
Terv
08.11.06
✎
17:13
|
зачем запросом?
|
|||
5
FarFar
08.11.06
✎
17:15
|
(4) Потому что это подзапрос в сложном запросе
|
|||
6
Terv
08.11.06
✎
17:18
|
кросс-отчет?
|
|||
7
Scooter
08.11.06
✎
17:19
|
вот для дат
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | 1 КАК Флаг, | &ДатаСоздания КАК ДатаСоздания | |ИТОГИ ПО | ДатаСоздания ПЕРИОДАМИ(МЕСЯЦ, &ДатаС, &ДатаПО)"; Запрос.Текст = СтрЗаменить(Запрос.Текст, "(МЕСЯЦ,", "(" + ТипГруппировкиКолонок + ","); Запрос.УстановитьПараметр("ДатаСоздания", Дата("00010101")); Запрос.УстановитьПараметр("ДатаС", ДатаС); Запрос.УстановитьПараметр("ДатаПО", ДатаПО); ВыборкаПериод = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "ДатаСоздания", "ВСЕ"); |
|||
8
asady
08.11.06
✎
17:20
|
(0)
вот таким запросом по мотивам идеи (с)megalodon SELECT (a3.id + a2.id + a1.id + a0.id) КАК Числа FROM ( SELECT 1 id UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 ) as a0 INNER JOIN ( SELECT 0 id UNION ALL SELECT 10 UNION ALL SELECT 20 UNION ALL SELECT 30 UNION ALL SELECT 40 UNION ALL SELECT 50 UNION ALL SELECT 60 UNION ALL SELECT 70 UNION ALL SELECT 80 UNION ALL SELECT 90 ) as a1 ON TRUE INNER JOIN ( SELECT 0 id UNION ALL SELECT 100 UNION ALL SELECT 200 UNION ALL SELECT 300 UNION ALL SELECT 400 UNION ALL SELECT 500 UNION ALL SELECT 600 UNION ALL SELECT 700 UNION ALL SELECT 800 UNION ALL SELECT 900 ) as a2 ON TRUE INNER JOIN ( SELECT 0 id UNION ALL SELECT 1000 UNION ALL SELECT 2000 UNION ALL SELECT 3000 UNION ALL SELECT 4000 UNION ALL SELECT 5000 UNION ALL SELECT 6000 UNION ALL SELECT 7000 UNION ALL SELECT 8000 UNION ALL SELECT 9000 ) as a3 ON TRUE ORDER BY Числа |
|||
9
FarFar
08.11.06
✎
17:22
|
(6) Углубляюсь в корни, это отчет, анализирующий обороты за периоды, длиной в N дней. Поэтому я группирую по "ПериодС", где ПериодС - определяю так:
ВЫБРАТЬ Города.Код КАК НомерПериода, НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(&текМомент, ДЕНЬ, -7 * Города.Код + 1), ДЕНЬ) КАК ПериодС, КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(&текМомент, ДЕНЬ, -7 * (Города.Код - 1)), ДЕНЬ) КАК ПериодПо ИЗ Справочник.Города КАК Города ГДЕ Города.Код <= &КоличествоПериодов |
|||
10
FarFar
08.11.06
✎
17:23
|
P.S. В данном случае N = 7
|
|||
11
Neco
08.11.06
✎
17:23
|
(7)В подзапросе не использовать
|
|||
12
FarFar
08.11.06
✎
17:24
|
(7), (11) ясен пень ,в подзапросе не использовать . Там же ИТОГИ. А мне надо использовать
|
|||
13
Scooter
08.11.06
✎
17:26
|
"список цифр от 1 до К" К - насколько большое значение может принимать?
|
|||
14
FarFar
08.11.06
✎
17:26
|
(8) 8-(((
|
|||
15
FarFar
08.11.06
✎
17:27
|
(13) к - ну, пусть до 1000
|
|||
16
asady
08.11.06
✎
17:28
|
(14) для семи будет вообще смешно:
SELECT a0.id КАК Числа FROM ( SELECT 1 id UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 ) as a0 ORDER BY Числа |
|||
17
Neco
08.11.06
✎
17:28
|
"периоды, длиной в N дней" - значит есть привязка к календарю?
|
|||
18
Scooter
08.11.06
✎
17:29
|
(13)если не большое тогда какнибудь так
ВЫБРАТЬ 1 ОБЪЕДИНИТЬ 2 ОБЪЕДИНИТЬ 3 ОБЪЕДИНИТЬ 4 ОБЪЕДИНИТЬ 5 ..... |
|||
19
FarFar
08.11.06
✎
17:30
|
(16) Asady, ты не понял. 7 - это N(длина периода), а не К(количество периодов). К - может быть, например, 200. То есть хотят посмотреть обороты по 200 периодам, каждый по неделе. СРАЗУ ГОВОРЮ: не предлагать использовать период = неделя. N может быть любым.
|
|||
20
FarFar
08.11.06
✎
17:30
|
(17) читай (19)
|
|||
21
Neco
08.11.06
✎
17:32
|
(20) Прочел ;-)
Как вариант создать регистр сведений в котором заполнить списком периодов. Т.е. например измерение регистра Дата и заполнить его списком дат, которое потом использовать в запросе. |
|||
22
asady
08.11.06
✎
17:35
|
(19)
с периодом говоришь. может так: SELECT (a0.id*&Период) КАК Числа FROM ( SELECT 1 id UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 ) as a0 ORDER BY Числа |
|||
23
FarFar
08.11.06
✎
17:35
|
(21) Мне это тоже приходило в голову. Поэтому и спросил у МИСТЫ, а как, если не откапывать стюардессу (то есть без извратов) -)))
|
|||
24
asady
08.11.06
✎
17:37
|
(22) получим при Период=7
набор чисел Числа 7 14 21 28 35 42 49 |
|||
25
pajaro
08.11.06
✎
17:39
|
(0)так текст из (8), только формировать текст динамически, в зависимости от верхнего предела
|
|||
26
FarFar
08.11.06
✎
17:41
|
(22), (25) Что ж, такой вариант работает, и по производительности явно лучше, чем мой с обращением к базе.
А ЕЩЕ ПРОЩЕ ? Без запроса из 1000 юнионов, с текстом ,формируемым динамически ??? |
|||
27
FarFar
08.11.06
✎
17:42
|
(18) - (26) насчет твоего варианта тоже. По сути, у тебя и Asady одно и то же
|
|||
28
sergeante
08.11.06
✎
17:42
|
щя прикиним... :)
|
|||
29
Neco
08.11.06
✎
17:42
|
(26) Ну нельзя в 8ке использовать курсоры нельзя ;-)
|
|||
30
pajaro
08.11.06
✎
17:44
|
(26)какие 1000?
юнионов будет 10*порядок числа. то есть, даже если нужен миллион, то юнионов порядка 80. |
|||
31
pajaro
08.11.06
✎
17:47
|
то есть, даже 70, а не 80
|
|||
32
FarFar
08.11.06
✎
17:52
|
(8), (31) Убедил! Считаю, что победил вариант Asady (8).
Есть несогласные? |
|||
33
asady
08.11.06
✎
17:54
|
(32) это не совсем мой вариант -
я же писал в (8) по мотивам идеи (с)megalodon |
|||
34
FarFar
08.11.06
✎
17:54
|
(33) Не знаю, что такое (кто такое) megalodon -((
|
|||
35
FarFar
08.11.06
✎
17:57
|
(33) Просвети!
|
|||
36
AntonioS
08.11.06
✎
18:03
|
мне кажется, для лучшей автоматизации можно подкорректировать вариант (8)
таким образом: все селекты выбирают числа от 0 до 9. и соответственно итоговое число : a3.id * 1000 + a2.id * 100 + a1.id * 10 + a0.id |
|||
37
asady
08.11.06
✎
18:07
|
(35) читай в этой ветке
v8: Как в запросе сгенерировать таблицу всех дат в заданном диапозоне? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |