![]() |
![]() |
![]() |
|
v7: Поиск в таблице значений? | ☑ | ||
---|---|---|---|---|
0
ildarius
14.02.14
✎
14:38
|
Здравствуйте! Есть 2 таблицы значений (ТЗ)
Пример: ТЗ1 Фабрика1 Фабрика2 Фабрика3 ТЗ2 Фабрика2 Товар1 Фабрика1 Товар2 Фабрика3 Товар3 Фабрика2 Товар4 Как получить итоговую таблицу Фабрика1 Товар2 Фабрика2 Товар1, Товар4 Фабрика3 Товар3 |
|||
1
bbnn
14.02.14
✎
14:41
|
Фабрика2 Товар1, Товар4
Сколько таких совпадений - столько колонок должно добавиться? |
|||
2
1Сергей
14.02.14
✎
14:42
|
Вторая колонка должна быть списком значений? |
|||
3
Voronve
14.02.14
✎
14:43
|
(0) Ручками перебирать
|
|||
4
1Сергей
14.02.14
✎
14:50
|
(3) не ручками, а циклом
|
|||
5
Chum
14.02.14
✎
14:51
|
(0) что сложного?
Сортировка, цикл с уловием и третья ТЗ тебя спасут. |
|||
6
МихаилМ
14.02.14
✎
15:05
|
это как раз задача на проф пригодность.
сделайте её не построчно, а по колонкам. |
|||
7
Ёпрст
гуру
14.02.14
✎
15:05
|
(0) загнать ТЗ в запрос на 1sqlite и сделать group_concat
|
|||
8
ildarius
14.02.14
✎
15:17
|
спасибо за активность. Сортировка, цикл с уловием и третья ТЗ тебя спасут. Не могу вкурить. Еси не трудно можно код?
|
|||
9
Voronve
14.02.14
✎
15:32
|
(4) Дааа ... Учитель.
|
|||
10
Mikeware
14.02.14
✎
15:43
|
ИндексированнаяТаблица, Группировать() и перебор тзПотомки
|
|||
11
Ёпрст
гуру
14.02.14
✎
15:44
|
(10) как в (7) красившее..
:) |
|||
12
ildarius
14.02.14
✎
15:48
|
понил...СПС. ща попробую.
|
|||
13
Mikeware
14.02.14
✎
15:50
|
(7) sqlite работает с ТЗ? не знал...
|
|||
14
Ёпрст
гуру
14.02.14
✎
15:53
|
(13) конечно, уложитьТЗ и привет.. а там примитивный запрос с concat .. и усё. Странно, что в t-sql нет такой функции, там только рученьками писать
|
|||
15
МихаилМ
14.02.14
✎
15:56
|
(14)
есть pivot |
|||
16
Mikeware
14.02.14
✎
15:58
|
(14) в 2005 и выше есть pivot
|
|||
17
Ёпрст
гуру
14.02.14
✎
16:03
|
(15) ага , и другие ранжирующие функции.. токма, не у всех скуль>=2005
^) |
|||
18
Ёпрст
гуру
14.02.14
✎
16:03
|
(0) на вот, пример
Процедура Сформировать() Попытка база = СоздатьОбъект("SQLiteBase"); Исключение ЗагрузитьВнешнююКомпоненту("1sqlite.dll"); база = СоздатьОбъект("SQLiteBase"); КонецПопытки; база.Открыть(":memory:"); запрос = база.НовыйЗапрос(); ТЗ = СоздатьОбъект("ТаблицаЗначений"); ТЗ.НоваяКолонка("ид","Число"); ТЗ.НоваяКолонка("Имя","Строка"); Для к = 1 По 5 Цикл ТЗ.НоваяСтрока(); ТЗ.ид = 1; ТЗ.Имя = "Вася"+к; КонецЦикла; Для к = 1 По 5 Цикл ТЗ.НоваяСтрока(); ТЗ.ид = 2; ТЗ.Имя = "Федя"+к; КонецЦикла; база.УложитьТЗ(ТЗ,"Вася",0); ТекстЗапроса = " |select ид,group_concat(Имя) from Вася group by ид"; запрос.ВыполнитьЗапрос(ТекстЗапроса).ВыбратьСтроку(); КонецПроцедуры |
|||
19
Chum
14.02.14
✎
16:03
|
(13) как бы создать временную таблицу и загрузить в нее тз
(8) тз3 = СоздатьОбъект("таблицазначений") тз3.новаяколонка("фабрика"); тз3.новаяколонка("товар" ); тз2.сортировать("фабрика"); тз1.ВыбратьСтроки(); пока тз1.ПолучитьСтроку()=1 Цикл нс = 0; если тз2.найтизначение(тз1.фабрика, нс, "фабрика")=0 тогда продолжить; Конецесли; тз3.новаястрока(); тз3.фабрика = тз1.фабрика; тз3.товар = создатьобъект("списокзначений"); пока 1=1 цикл тз2.получитьстрокупономеру(нс); если тз2.фабрика <> тз1.фабрика тогда прервать; иначе тз3.товар.добавитьзначение(тз2.товар); конеццикла; конеццикла; конецесли; КонецЦикла; |
|||
20
Chum
14.02.14
✎
16:05
|
если точнее, то как-то так:
тз1.ВыбратьСтроки(); пока тз1.ПолучитьСтроку()=1 Цикл нс = 0; если тз2.найтизначение(тз1.фабрика, нс, "фабрика")=0 тогда продолжить; Конецесли; тз3.новаястрока(); тз3.фабрика = тз1.фабрика; тз3.товар = создатьобъект("списокзначений"); пока 1=1 цикл тз2.получитьстрокупономеру(нс); если тз2.фабрика <> тз1.фабрика тогда прервать; иначе тз3.товар.добавитьзначение(тз2.товар); конеццикла; нс = нс + 1; КонецЦикла; |
|||
21
Chum
14.02.14
✎
16:06
|
блин, в блокноте сложно писать код.
нс = нс + 1; - надо затолкать внутрь второго цикла |
|||
22
Mikeware
14.02.14
✎
16:28
|
(20) можно и одним циклом.
только пейсать лениво |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |