|
объединить в запросе | ☑ | ||
---|---|---|---|---|
0
FFrr1C
28.07.22
✎
16:38
|
Добрый день возможно ли получить запросом следующее:
у дока две таб части "Затраты" и "Услуги", по одной записи в каждой табчасти пишем ВЫБРАТЬ ТСРейсЗатраты.Ссылка КАК Ссылка, ТСРейсЗатраты.СпособРаспределения КАК СпЗатраты, "пусто" КАК СпУслуги ИЗ Документ.Рейс.Затраты КАК ТСРейсЗатраты ОБЪЕДИНИТЬ ВЫБРАТЬ ТЧРейсУслуги.Ссылка, "пусто", ТЧРейсУслуги.СпособРаспределения ИЗ Документ.Рейс.Услуги КАК ТЧРейсУслуги результат получаем док затраты услуги Рйес N123 | Вес | пусто Рйес N123 | пусто | Объем возможно ли получить запросом результат Рйес N123 | Вес | объем |
|||
1
FFrr1C
28.07.22
✎
16:41
|
всегда думал что "объединить" свернет таблицу
|
|||
2
lodger
28.07.22
✎
16:43
|
(0) что ты будешь делать когда количество строк не совпадёт, а значения будут различные?
|
|||
3
lodger
28.07.22
✎
16:43
|
(1) не правильно думал.
свернет таблицу группировка в запросе или метод Свернуть() у ТаблицыЗначений |
|||
4
FFrr1C
28.07.22
✎
16:45
|
записи продублируются, если значение и количество строк различное, а в этом идеальном примере, что сгруппировать, чтобы получить результат?
|
|||
5
FFrr1C
28.07.22
✎
16:49
|
вернее продублируются записи с одинаковым полем ссылка
|
|||
6
ZDenis
28.07.22
✎
16:49
|
(4) Левое соединение по номеру строки
|
|||
7
Йохохо
28.07.22
✎
16:51
|
(5) вернее ничего не дублируется никогда, лишь только иногда убираются одинаковые строки
|
|||
8
FFrr1C
28.07.22
✎
16:53
|
ZDenis, левое соединение не подходит, могут быть пустыми как затраты так и услуги у документа, первичного тут ничего нет
|
|||
9
ZDenis
28.07.22
✎
16:55
|
(8) Тогда по какому принципу ты хочешь соединить одно с другим? Две не связанные никаким боком ТЧ, но хочешь выстроить их в линию.
|
|||
10
Йохохо
28.07.22
✎
16:57
|
(8) а документ несчетово? и "пусты" приведите к типу поля
|
|||
11
FFrr1C
28.07.22
✎
16:58
|
Йохохо, что? не понял к сожалению..
|
|||
12
FFrr1C
28.07.22
✎
17:00
|
ZDenis как раз связанные, одинковые таблицы одной ссылки документа, отразить в результате корреляцию.
|
|||
13
lodger
28.07.22
✎
17:02
|
(12) так строки ТЧ по смысле друг с другом связаны?
|
|||
14
lodger
28.07.22
✎
17:04
|
а так пиши конечно
ВЫБРАТЬ ТСРейсЗатраты.Ссылка КАК Ссылка, ТСРейсЗатраты.СпособРаспределения КАК СпЗатраты, ТЧРейсУслуги.СпособРаспределения КАК СпУслуги ИЗ Документ.Рейс.Затраты КАК ТСРейсЗатраты, Документ.Рейс.Услуги КАК ТЧРейсУслуги ГДЕ ТСРейсЗатраты.Ссылка = &Ссылка И ТЧРейсУслуги.Ссылка = &Ссылка |
|||
15
FFrr1C
28.07.22
✎
17:08
|
это запрос не подходит если в базе два дока РейсN123 и РейсN124
а результат должен быть Рйес N123 | Вес | объем Рйес N124 | Вес | объем |
|||
16
FFrr1C
28.07.22
✎
17:10
|
даже если в затратах две строки и вес и объем, а в услугах только объем
все равно результат для корреляции годный Рйес N123 | Вес | объем Рйес N123 | Объем | объем с этим что-то можно сделать, но никак не с Рйес N123 | Вес | пусто Рйес N123 | Объем | пусто Рйес N123 | пусто | Объем |
|||
17
ZDenis
28.07.22
✎
17:12
|
(16) Так у тебя там числовые поля или нет? Как то название колонок Вес и Объем не вяжется с тем что ты выбираешь.
Если числовые, то вместо пусто надо 0, а потом сгруппировать по рейсу |
|||
18
FFrr1C
28.07.22
✎
17:12
|
Нет, это перечисления
|
|||
19
FFrr1C
28.07.22
✎
17:14
|
это понятно, что там где пусто будет 0, а там где Вес или Объем будет чисо, сумма по группировке и свернет таблицу, вопрос и есть в том, можно ли как то свернуть по значениям не числовым без суммирования
|
|||
20
FFrr1C
28.07.22
✎
17:15
|
помоему желание законное) получить необходимый результат..
|
|||
21
FFrr1C
28.07.22
✎
17:16
|
вот смотрю я на таблицу
Рйес N123 | Вес | пусто Рйес N123 | пусто | Объем и кажется что можно вырулить её в Рйес N123 | Вес | объем или запросом врятле? |
|||
22
Йохохо
28.07.22
✎
17:17
|
(19) МАКСИМУМ не суммирует
|
|||
23
PuhUfa
28.07.22
✎
17:18
|
(21) Можно в запросе, мы не против -)
|
|||
24
Смотрящий
28.07.22
✎
17:24
|
(21)
ВЫБРАТЬ Данные.Ссылка КАК Ссылка, МАКСИМУМ(Данные.СпЗатраты) КАК СпЗатраты, МАКСИМУМ(Данные.СпУслуги) КАК СпУслуги ИЗ ( ВЫБРАТЬ ТСРейсЗатраты.Ссылка КАК Ссылка, ТСРейсЗатраты.СпособРаспределения КАК СпЗатраты, NULL КАК СпУслуги ИЗ Документ.Рейс.Затраты КАК ТСРейсЗатраты ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ТЧРейсУслуги.Ссылка, NULL, ТЧРейсУслуги.СпособРаспределения ИЗ Документ.Рейс.Услуги КАК ТЧРейсУслуги ) КАК Данные СГРУППРОВАТЬ Данные.Ссылка |
|||
25
FFrr1C
28.07.22
✎
17:26
|
Максимум почти подходит, но к сожалению мы не получим
Рйес N123 | Вес | объем Рйес N123 | Объем | объем в случае разного количество строк |
|||
26
Йохохо
28.07.22
✎
17:28
|
(25) с весом да, беда, придется суммировать
|
|||
27
Said_We
28.07.22
✎
17:28
|
+(27) ЕстьNULL() необходимо добавить и значение по умолчанию.
|
|||
28
FFrr1C
28.07.22
✎
17:29
|
а идея в том чтобы потом, наложить "Где" затраты <> услуги, и получить раскорреляцию
ну видимо запросом это не судьба Рйес N123 | Вес | объем |
|||
29
FFrr1C
28.07.22
✎
17:32
|
правда запутал неправильным названием тут всех
док способ затраты способ услуги Рйес N123 | СпособПоВесу | пусто Рйес N123 | пусто | СпособПоОбъему |
|||
30
Said_We
28.07.22
✎
17:32
|
(28) Да ладно - не получится?
Если на бумаге получится, то и в запросе получится. |
|||
31
Said_We
28.07.22
✎
17:33
|
В (0) неверно задачу сформулировал, а тут народ что-то решает.
|
|||
32
Йохохо
28.07.22
✎
17:34
|
(28) "раскорреляция", порко мадонна, дисфункция протагониста
|
|||
33
FFrr1C
28.07.22
✎
17:35
|
ну там в шапке в запросе написано СпособРаспределения, это не число как бы
|
|||
34
FFrr1C
28.07.22
✎
17:35
|
у СпособРаспределения значение равно Объем
|
|||
35
Said_We
28.07.22
✎
17:36
|
Если способ это одно и тот же тип и неважно сколько изначально каждого, то предварительно таблицы сверни, что бы двойников не было.
Первой таблице добавь -1, а второй +1. Сложи таблицы и там где ноль, всё сошлось. Тебя интересует не ноль. |
|||
36
FFrr1C
28.07.22
✎
17:37
|
Чел Ораклист, сказал что такие вопросы у себя на раз решает, там одни запросы у него,я ему верю
|
|||
37
Said_We
28.07.22
✎
17:38
|
(36) Тебе и тут сказали, что задача крайне простая.
|
|||
38
Said_We
28.07.22
✎
17:39
|
Более того одну решили, а вторую рассказали как решать.
|
|||
39
Said_We
28.07.22
✎
17:40
|
Так как с первого раза не смог правильно условие сформулировать.
|
|||
40
FFrr1C
28.07.22
✎
17:40
|
Said_We, через ЕстьNull()?
|
|||
41
lodger
28.07.22
✎
17:40
|
(36) задача то плёвая. просто ты не можешь её адекватно донести.
|
|||
42
FFrr1C
28.07.22
✎
17:40
|
почитайте еще раз шапку, что там не корректного?
|
|||
43
Said_We
28.07.22
✎
17:40
|
Правильно сформулированное условие задачи, это 80% решения.
|
|||
44
Йохохо
28.07.22
✎
17:41
|
(40) Значение(Перечисление.СпособРаспределения.ПустаяСсылка)
|
|||
45
Said_We
28.07.22
✎
17:43
|
(44) Не у него в (0) строка "пусто" зачем-то.
Хрен его знает что за задачу ему надо решить :-) |
|||
46
FFrr1C
28.07.22
✎
17:44
|
"пусто" для наглядности результата, емае, ну вы там по чем то, чтоли?
|
|||
47
Said_We
28.07.22
✎
17:45
|
По чем то девчоночки на улице стоят.
А мы под пивом можем максимум и только в пятницу. Ещё раз расскажи с самого начала и не чего не упуская что необходимо. И не важно что до этого в ветке писал. |
|||
48
alarm2020
28.07.22
✎
17:46
|
(28) Так, а максимум-то почему не используешь?
|
|||
49
Йохохо
28.07.22
✎
17:46
|
(46) (44) вместо "пусто", а вместо "пусто" давай сам
|
|||
50
FFrr1C
28.07.22
✎
17:51
|
максимум получит заместо результата
Рйес N123 | Вес | объем Рйес N123 | Объем | объем результат Рйес N123 | Объем | объем если в затратах две строки и вес и объем, а в услугах только объем |
|||
51
alarm2020
28.07.22
✎
17:53
|
(50) Тогда тебе полное соединение нужно использовать
|
|||
52
alarm2020
28.07.22
✎
17:54
|
Вместо объединения
|
|||
53
Said_We
28.07.22
✎
17:54
|
(50) "не упуская" - это видать ничего не упуская.....
Только ты знаешь что такое рейсы и что такое объемы и какого они типа. Хотя бы пример привел, если с формулировкой задачи такие серьёзные проблемы. (51) Не надо на 99%. |
|||
54
lodger
28.07.22
✎
17:55
|
(8) ну сделай полное соединение.
ВЫБРАТЬ ТЧ1.Ссылка КАК Ссылка, ТЧ1.СпособРаспределения КАК СпЗатраты, ТЧ2.СпособРаспределения КАК СпУслуги ИЗ (ВЫБРАТЬ вТЧ1.Ссылка КАК Ссылка, вТЧ1.НомерСтроки КАК НомерСтроки, вТЧ1.СпособРаспределения КАК СпособРаспределения ИЗ Документ.Рейс.Затраты КАК вТЧ1 ГДЕ вТЧ1.Ссылка = &Ссылка) КАК ТЧ1 ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ вТЧ2.Ссылка КАК Ссылка, вТЧ2.НомерСтроки КАК НомерСтроки, вТЧ2.СпособРаспределения КАК СпособРаспределения ИЗ Документ.Рейс.Услуги КАК вТЧ2 ГДЕ вТЧ2.Ссылка = &Ссылка) КАК ТЧ2 ПО (ТЧ1.Ссылка = ТЧ2.Ссылка И ТЧ1.НомерСтроки = ТЧ2.НомерСтроки) |
|||
55
alarm2020
28.07.22
✎
17:56
|
(53) Соединение + группировка по всем полям. И ТС получит, что хотел
|
|||
56
alarm2020
28.07.22
✎
17:57
|
(54) Зачем соединение по номеру строки?
|
|||
57
Said_We
28.07.22
✎
17:59
|
(56) Зачем вообще соединение если именно это необходимо реализовывать?
|
|||
58
FFrr1C
28.07.22
✎
18:01
|
если полным соединением
тогда получим Рйес N123 ЛЕВЫЙ |Рйес N123 ПРАВЫЙ | Вес | объем Рйес N123 ЛЕВЫЙ |Рйес N123 ПРАВЫЙ | Объем | объем |
|||
59
alarm2020
28.07.22
✎
18:02
|
(57) Предпочитаю отвечать на поставленный вопрос, а не "лечить" автора
|
|||
60
alarm2020
28.07.22
✎
18:02
|
(58) Так. Чего тебе тут не хватает?
|
|||
61
Said_We
28.07.22
✎
18:03
|
(60) Чего ему не хватало в (24)?
|
|||
62
alarm2020
28.07.22
✎
18:04
|
(61) Соединения
|
|||
63
FFrr1C
28.07.22
✎
18:06
|
alarm2020, впринципе годный вариант,
получается объединением тут не вырулить, я так понимаю. Said_We , ну не подходит максимум в группировке по двум строкам с разным перечислением, они обе нужны. |
|||
64
Said_We
28.07.22
✎
18:06
|
ВЫБРАТЬ
Данные.Ссылка КАК Ссылка, ЕстьNULL(МАКСИМУМ(Данные.СпЗатраты), "ПУСТО для НАГЛЯДНОСТИ ё маё") КАК СпЗатраты, ЕстьNULL(МАКСИМУМ(Данные.СпУслуги), "ПУСТО для НАГЛЯДНОСТИ ё маё") КАК СпУслуги ИЗ ( ВЫБРАТЬ РАЗЛИЧНЫЕ ТСРейсЗатраты.Ссылка КАК Ссылка, ТСРейсЗатраты.СпособРаспределения КАК СпЗатраты, NULL КАК СпУслуги ИЗ Документ.Рейс.Затраты КАК ТСРейсЗатраты ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ РАЗЛИЧНЫЕ ТЧРейсУслуги.Ссылка, NULL, ТЧРейсУслуги.СпособРаспределения ИЗ Документ.Рейс.Услуги КАК ТЧРейсУслуги ) КАК Данные СГРУППРОВАТЬ Данные.Ссылка ИМЕЮШИЕ МАКСИМУМ(Данные.СпЗатраты) <> МАКСИМУМ(Данные.СпУслуги) РАЗЛИЧНЫЕ - добавил, что бы предварительно свернуть и ЕСТЬNULL для наглядности ё маё :-) |
|||
65
alarm2020
28.07.22
✎
18:11
|
(63) Через ЕСТЬNULL() свернешь левое-правое поле в одно. Будет в точности твой результат
|
|||
66
Said_We
28.07.22
✎
18:13
|
(59) Кто кого лечит?
Нет поставленного вопроса - нет ответа, а только догадки, и ответы кто как понял вопрос. |
|||
67
FFrr1C
28.07.22
✎
18:14
|
Ага, оно, спасибо!
просто я как-то иначе относился к конструкции "объединить")) |
|||
68
alarm2020
28.07.22
✎
18:15
|
(66) По мне, так вопрос довольно сносно сформулирован. Хоть и не с первого раза
|
|||
69
alarm2020
28.07.22
✎
18:17
|
(64) РАЗЛИЧНЫЕ ты добавил, потому что синтаксис запроса плохо знаешь
|
|||
70
alarm2020
28.07.22
✎
18:19
|
(67) Она, кстати, может сворачивать (правда этим очень редко пользуются). Но не в твоем случае
|
|||
71
Said_We
28.07.22
✎
18:19
|
(67) Интересно как?
Там всего два варианта: ОБЪЕДИНИТЬ ВСЕ и ОБЪЕДИНИТЬ Разница в том, что во втором варианте ОБЪЕДИНИТЬ - это фактически ОБЪЕДИНИТЬ ВСЕ, а потом РАЗЛИЧНЫЕ. (64) Какого-то конкретного запроса? |
|||
72
Said_We
28.07.22
✎
18:20
|
(69) Какого-то конкретного запроса?
|
|||
73
alarm2020
28.07.22
✎
18:21
|
(71) О, уже подучился!
|
|||
74
Said_We
28.07.22
✎
18:32
|
(73) Обрати внимание что РАЗЛИЧНЫЕ относятся к выборкам из разных табличных частей. И для каждой своя инструкция РАЗЛИЧНЫЕ используются.
Не к чему тащить на следующие этапы запроса огромные данные. Если сразу можно свернуть, то сворачиваем. Там для каждого документа может по пару способов распределения всего. Если способ это перечисление, то сколько может быть в документе - правильно всего чуть чуть. :-) (67) Ответ был ещё в 24. То чего ты не знал или забыл, это то что: Максимум(ЛюбоеЗначениеНеNULL, NULL) = ЛюбоеЗначениеНеNULL Максимум(NULL, NULL) = NULL Минимум(ЛюбоеЗначениеНеNULL, NULL) = ЛюбоеЗначениеНеNULL Минимум(NULL, NULL) = NULL |
|||
75
Ryzeman
29.07.22
✎
07:16
|
Порой удивляешься количеству извращений у людей....
Сперва выбери в ВТ через ОБЪЕДЕНИТЬ ссылки, потом левым соединением связывай и группируй. |
|||
76
alarm2020
29.07.22
✎
08:21
|
(75) Зачем первый шаг? Чтобы работало быстрее?
|
|||
77
Ryzeman
29.07.22
✎
08:34
|
(76) Ага. Ему по логике нужно полное соединение - он заранее не знает какие данные есть в какой табличной части. Но с полным может получиться нехорошо, если там данных ну очень много будет. Ещё вариант - (24)\(74).
|
|||
78
alarm2020
29.07.22
✎
08:45
|
(77) А данных будет относительно немного? Почему вы такой вариант не рассматриваете? Вообще-то обычно пишут о том, что данных много. Здесь этого не прозвучало. Я считаю, что по возможности следует отдавать приоритет простоте над производительностью
|
|||
79
alarm2020
29.07.22
✎
08:48
|
А ЕСЛИ данных будет относительно немного...
|
|||
80
lodger
29.07.22
✎
09:23
|
(58) ты мне тут не упражняйся в имитации запросной машинки. пойди да выполни запрос в консоли и не выдумывай.
|
|||
81
Said_We
29.07.22
✎
10:39
|
(75) "Порой удивляешься количеству извращений у людей....
Сперва выбери в ВТ через ОБЪЕДЕНИТЬ ссылки, потом левым соединением связывай и группируй." Не говори. Извращаются как могут. Сначала потратят время и ресурс в памяти на сбор в ВТ ВСЕХ ссылок документа вида Рейс. Нужны же все. Потом ЛЕВОЕ СОЕДИНЕНИЕ кого-то с кем-то...... Удивляют и Удивляют..... :-) |
|||
82
Ryzeman
29.07.22
✎
10:46
|
(81) А немножко подумать и понять что речь идёт только о тех что в документе\документах которые автору нужны?
|
|||
83
Ryzeman
29.07.22
✎
10:47
|
(79) Вот думать что там будет и как лучше - уже задача автора, никак не моя. Ну и "усложнение" в виде написания запроса не в 13 строк а в 15 - это конечно не читаемо. Тут нужен уже программист не за 200к а за 300.
|
|||
84
Eskeych
29.07.22
✎
11:57
|
док затраты услуги
Рйес N123 | Вес | пусто Рйес N123 | пусто | Объем а если попробовать сделать не через Объединить, а соединить таблицы левым соединением. и через Выбор Когда Услуги = Значение(Спр.услуги.пустаяСсылка) Тогда Вт1.Услуги1 Иначе Вт0.услуги конец так не прокатит разве? |
|||
85
Eskeych
29.07.22
✎
12:07
|
ВЫБРАТЬ
СписокРейсов1.Рейс КАК Рейс, ВЫРАЗИТЬ(СписокРейсов1.Вес КАК СТРОКА(12)) КАК Вес, ВЫРАЗИТЬ(СписокРейсов1.Услуги КАК СТРОКА(12)) КАК Услуги ПОМЕСТИТЬ ВТ1 ИЗ &СписокРейсов1 КАК СписокРейсов1 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ СписокРейсов1.Рейс КАК Рейс, ВЫРАЗИТЬ(СписокРейсов1.Вес КАК СТРОКА(12)) КАК Вес, ВЫРАЗИТЬ(СписокРейсов1.Услуги КАК СТРОКА(12)) КАК Услуги ПОМЕСТИТЬ ВТ2 ИЗ &СписокРейсов2 КАК СписокРейсов1 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ1.Рейс КАК Рейс, ВЫБОР КОГДА ВТ1.Вес = "" ТОГДА ВТ2.Вес ИНАЧЕ ВТ1.Вес КОНЕЦ КАК Поле1, ВЫБОР КОГДА ВТ1.Услуги = "" ТОГДА ВТ2.Услуги ИНАЧЕ ВТ1.Услуги КОНЕЦ КАК Поле2 ИЗ ВТ1 КАК ВТ1 ЛЕВОЕ СОЕДИНЕНИЕ ВТ2 КАК ВТ2 ПО ((ВЫРАЗИТЬ(ВТ1.Рейс КАК СТРОКА(12))) = (ВЫРАЗИТЬ(ВТ2.Рейс КАК СТРОКА(12)))) |
|||
86
Eskeych
29.07.22
✎
12:08
|
в принципе, если решать (0), то работет
|
|||
87
Said_We
29.07.22
✎
12:23
|
(85) "&СписокРейсов1" это ТЗ предварительно собранная зачем? Что бы потом её же засунуть в запрос в качестве параметра и во временную таблицу?
Зачем такие сложности? Зачем тормозные JOIN использовать на право и на лево, там где можно обойтись без них? |
|||
88
Eskeych
29.07.22
✎
12:34
|
(87) я накидал запрос себе и проверил вывод. Суть была в "Выбор когда тогда и итд"
|
|||
89
Eskeych
29.07.22
✎
12:35
|
(87) Он ведь будет в запросе получать значения из документа, у него уже есть его таблица, а у меня только консоль)
|
|||
90
Кура-Цеце
29.07.22
✎
12:39
|
(50) > если в затратах две строки и вес и объем, а в услугах только объем
(0) > по одной записи в каждой табчасти Ты б определился, а? |
|||
91
rudnitskij
30.07.22
✎
15:53
|
Такой увлекательной угадайки и по телевизору не посмотришь
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |