|
Нужна помощь алгоритма составления запроса. | ☑ | ||
---|---|---|---|---|
0
memogolik
16.07.13
✎
11:46
|
Нужна помощь по запросу в 1с 8.2
Есть таблица1, у которой есть два поля: а1 и а2. Есть внешняя переменная Б (в которой хранится список значений б1, б2, ... , бNn). Необходимо в случае, если в строке таблицы1 а2="" вместо такой строки вставить следующие строки: а1 б1 а1 б2 ...... а1 бn Заранее спасибо за ответы |
|||
1
Wobland
16.07.13
✎
11:47
|
это называется декартово произведение?
|
|||
2
memogolik
16.07.13
✎
11:50
|
(1) не в курсе ;) . Это как поможет при решении задачи?)
|
|||
3
samozvanec
16.07.13
✎
11:55
|
(1) да
|
|||
4
samozvanec
16.07.13
✎
11:55
|
(2) это и есть решение
|
|||
5
fisher
16.07.13
✎
11:56
|
ВЫБРАТЬ
Т1.а1, ВЫБОР КОГДА Т2.Б ЕСТЬ NULL ТОГДА Т1.а2 ИНАЧЕ Т2.Б КОНЕЦ ИЗ Т1 ЛЕВОЕ СОЕДИНЕНИЕ Т2 ПО Т1.А2 = "" |
|||
6
Ненавижу 1С
гуру
16.07.13
✎
11:56
|
а если a2<>"" то?
|
|||
7
Ненавижу 1С
гуру
16.07.13
✎
11:57
|
(5) заменить
ВЫБОР КОГДА Т2.Б ЕСТЬ NULL ТОГДА Т1.а2 ИНАЧЕ Т2.Б КОНЕЦ на ЕСТЬNULL(Т2.Б,Т1.а2) |
|||
8
НЕА123
16.07.13
✎
11:58
|
ВЫБРАТЬ
Т1.а1, Т2.полеБ ИЗ Т1 КАК Т1, Т2 КАК Т2 Где Т1.А2 = "" |
|||
9
fisher
16.07.13
✎
11:58
|
(7) Точняк. Ступил.
|
|||
10
НЕА123
16.07.13
✎
11:59
|
(8)+
собственно, как всегда - ответ в посте (1) (с) |
|||
11
fisher
16.07.13
✎
12:01
|
Да. Давайте все соединения заменим на декартово произведение с условием.
|
|||
12
memogolik
16.07.13
✎
12:09
|
Б - это не таблица, а переменная типа список значений, к которой можно обратиться лишь В ИЕРАРХИИ(&Б)
|
|||
13
fisher
16.07.13
✎
12:37
|
(12) Сабжевая задача решается в (5), если загнать список значений во временную таблицу Т2. Ты не знаешь, как это делается?
|
|||
14
memogolik
16.07.13
✎
14:28
|
(13) но в (5)
он увеличивает в N раз число записей, в которых а2 отлично от 0, где N - число элементов в списке значений Б |
|||
15
fisher
16.07.13
✎
15:24
|
(14) Проверка:
ВЫБРАТЬ а1, а2 ПОМЕСТИТЬ Т1 ИЗ (ВЫБРАТЬ 1 КАК а1, "1" КАК а2 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 2, "2" ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 3, "" ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 4, "4" ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 5, "5" ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 6, "6") Т1; ВЫБРАТЬ б ПОМЕСТИТЬ Т2 ИЗ (ВЫБРАТЬ "ф" КАК Б ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "ы" ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "в") Т2; ВЫБРАТЬ Т1.а1, ВЫБОР КОГДА Т2.Б ЕСТЬ NULL ТОГДА Т1.а2 ИНАЧЕ Т2.Б КОНЕЦ ИЗ Т1 ЛЕВОЕ СОЕДИНЕНИЕ Т2 ПО Т1.А2 = "" Результат: 1 1 2 2 3 ф 3 ы 3 в 4 4 5 5 6 6 Разве не это требовалось по условиям сабжа? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |