|
Выбрать по одной строке для значения поля | ☑ | ||
---|---|---|---|---|
0
sbabay
05.12.12
✎
09:02
|
Есть две таблицы:
1)втРасходы с колонками: Контрагент, Услуга, Товар, ПриходДок 2)втДолги с колонками: Контрагент, Сумма Во второй таблице "Контрагент" - уникальное. В первой уникальность по совокупности столбцов. Нужно дополнить ЛЮБУЮ ОДНУ строку первой значением столбца "Сумма" второй таблицы для каждого контрагента. Пример. 1) втРасходы: Контрагент1, Продажа, Костыль, Док1 Контрагент1, Продажа, Костыль2, Док1 Контрагент1, Продажа, Костыль, Док2 Контрагент2, Продажа, Цветок, Док2 20 втДолги: Контрагент1, 100 Контрагент2, 200 Итоговая таблица: Контрагент1, Продажа, Костыль, Док1, 100 Контрагент1, Продажа, Костыль2, Док1, 0 Контрагент1, Продажа, Костыль, Док2, 0 Контрагент2, Продажа, Цветок, Док2, 200 Ес-но надо в запросе |
|||
1
sbabay
05.12.12
✎
09:04
|
Первое что приходит на ум - вложенные запросы, причем уровень вложенности будет равен количеству колонок, по которому первая таблица имеет уникальный ключ, т.е. в данном случае = 4.
Но хочется более изящного и простого решения. Есть идеи? |
|||
2
butterbean
05.12.12
✎
09:09
|
делаешь запрос к таблице1: Контрагент, МАКСИМУМ(Услуга),МАКСИМУМ(Товар),МАКСИМУМ(ПриходДок)
к ней левым соединением цепляешь таблицу2 получившуюся таблицу левым соединением по всем полям цепляешь к таблице1 |
|||
3
sbabay
05.12.12
✎
09:11
|
(2) и в итоге ни с чем не соединится, ибо МАКСИМУМЫ пришли из разных строк
|
|||
4
butterbean
05.12.12
✎
09:12
|
(3) а, ну да...
|
|||
5
mzelensky
05.12.12
✎
09:14
|
(3) ну можно не максимум, можно просто взять первую строку.
а потом как в (2) |
|||
6
sbabay
05.12.12
✎
09:16
|
(5) и как "просто взять первую строку"?
|
|||
7
butterbean
05.12.12
✎
09:18
|
а может так:
соединить 1-ю и 2-ю потом запрос к первой типа: Контрагент,КОЛИЧЕСТВО(Контрагент) потом соединить их по Контрагент, а поле Сумма разделить на КОЛИЧЕСТВО(Контрагент) ну как-то так |
|||
8
mzelensky
05.12.12
✎
09:21
|
А может как-то проиндеквировать первую таблицу.Типа
Контрагент1, Продажа, Костыль, Док1 - ИД1 Контрагент1, Продажа, Костыль2, Док1 - ИД2 Контрагент1, Продажа, Костыль, Док2 - ИД3 Контрагент2, Продажа, Цветок, Док2 - ИД2 А потом делать соединение второй по условию ИД = ИД1 |
|||
9
sbabay
05.12.12
✎
09:22
|
(7) Т.е. предлагаешь в примере из (0) разбить 100 на 3 и вписать в каждую строку по 33, 33(3)?
Если да, то так нельзя по условию задачи. Если нет, то не понял как. |
|||
10
sbabay
05.12.12
✎
09:24
|
(8) об этом тоже думал, но не знаю как проиндексировать. Ведь в языке запросов от 1С нет ни НьюИД(), ни РоИД, ни преобразования ссылки в строку.
Сквозную нумерацию к такой таблице тоже прилепить сложно. |
|||
11
jenny_tea
05.12.12
✎
09:25
|
Левое соединение втРасходы и втДолги по Контрагент естесно
а поле сумма прописать как естьNull(втДолги.Сумма,0) |
|||
12
jenny_tea
05.12.12
✎
09:27
|
сорри так будет во всех по контагенту
|
|||
13
sbabay
05.12.12
✎
11:52
|
есть еще у кого-нибудь мысли?
|
|||
14
butterbean
05.12.12
✎
13:59
|
(13) изврат конечно, но можно как в (2) только делать МАКСИМУМ(Услуга.Код + Товар.Код + и т.д.) так должно прокатить :-)
|
|||
15
sbabay
05.12.12
✎
14:02
|
(14) так прокатит если коды уникальны, а это необязательное требование (как и уникальные наименования)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |