|
Можно ли обойтись только языком запросов? | ☑ | ||
---|---|---|---|---|
0
camojiet
17.06.16
✎
11:32
|
Добрый день!
Есть таблица1 Номенклатура1 Документ1 1000 Номенклатура1 Документ2 2000 Номенклатура1 Документ3 3000 Есть таблица2 Номенклатура1 1500 Номенклатура1 2500 Можно ли используя только язык запросов получить таблицу3: Номенклатура1 Документ1 1000 1500 Номенклатура1 Документ2 2000 2500 Номенклатура1 Документ3 3000 NULL Не ссылаясь в условии на Документ1 или Документ2. Типа чтобы соединение выполнилось как-бы только первый раз (знаю, что чушь), но мало ли, может есть какая-то метода... |
|||
1
Nuobu
17.06.16
✎
11:34
|
(0) Добавь номера строк в оба запроса и соединяй по ним.
|
|||
2
Ёпрст
17.06.16
✎
11:34
|
vj;yj
|
|||
3
xxTANATORxx
17.06.16
✎
11:36
|
(0)а почему Номенклатура1 Документ3 3000 NULL ???
2500 меньше 3000 ??? |
|||
4
xxTANATORxx
17.06.16
✎
11:36
|
(0)а так лефт джоин
|
|||
5
AceVi
17.06.16
✎
11:39
|
(0) Условия задачи недостаточно - непонятно для чего и как ты соединяешь эти 2 таблицы, по каким конкретно условиям.
А так можно строить промежуточные группировки и во временные таблицы помещать. |
|||
6
Ёпрст
17.06.16
✎
11:40
|
(0)
Почему Номенклатура1 Документ2 2000 2500 , а не Номенклатура1 Документ2 2000 1500 ??? Первая строка во второй табличке 1500 же. |
|||
7
Карупян
17.06.16
✎
11:42
|
Соединять нужно по номенклатура + Номер в группе.
Номер в группе можно как запросом так и обработкой |
|||
8
camojiet
17.06.16
✎
11:42
|
(1) Забыл упомянуть, что может идти не по порядку:
Таб1 Номенклатура2 Документ1 1000 Номенклатура1 Документ2 2000 Номенклатура1 Документ3 3000 таблица2 Номенклатура1 1500 Номенклатура1 2500 Таб3 Номенклатура2 Документ1 1000 NULL Номенклатура1 Документ2 2000 1500 Номенклатура1 Документ3 3000 2500 (3) только потому, что 1500 и 2500 уже были. (4) лефт джоин по номенклатуре размножит первую таблицу (5)(6) смысл в том, чтобы строка из второй таблицы попала в первую 1 раз |
|||
9
Nuobu
17.06.16
✎
11:44
|
(8) Ну оно и понятно. Я тебе дал саму суть, как сделать. Добавь в лефт джоин, помимо номера строки еще и номенклатуру и будет тебе счастье.
|
|||
10
camojiet
17.06.16
✎
11:47
|
(8) Это же получается нужно подготовить таблицу:
Номенклатура2 Документ1 1000 0 Номенклатура1 Документ2 2000 0 // порядковый номер ном 1 Номенклатура1 Документ3 3000 1 Номенклатура1 Документ2 2000 2 Номенклатура3 Документ3 3000 0 Номенклатура4 Документ2 2000 0 Номенклатура5 Документ3 3000 0 таблица2 Номенклатура1 1500 0 Номенклатура1 2500 1 |
|||
11
camojiet
17.06.16
✎
11:48
|
А пронумеровать в запросе так можно? :)
|
|||
12
Nuobu
17.06.16
✎
11:48
|
(10) угу + (11) можно, но нужно гуглить.
|
|||
13
Nuobu
17.06.16
✎
11:49
|
(12) + не знаю, применимо ли это к Мисте, но по принципу гуглить - мистить.
|
|||
14
Ёпрст
17.06.16
✎
11:54
|
(11) можно, самосоединение + условие что номеклатура+документ <номеклатура+документ из присоединяемой табличке
|
|||
15
Fragster
гуру
17.06.16
✎
11:57
|
(8) не понял. в (0) Номенклатура1 Документ1 1000 1500 а в (8) Номенклатура1 Документ1 2000 1500
принцип распределения какой? а вообще это намного проще делается правильной сортировкой двух исходных таблиц и одинарным проходом одновременно через обе. |
|||
16
camojiet
17.06.16
✎
12:08
|
(14)
Получается: Номенклатура2 Документ1 1000 1 Номенклатура1 Документ2 2000 2 Номенклатура1 Документ3 3000 2 Номенклатура1 Документ4 3000 2 А нуно: Номенклатура2 Документ1 1000 1 Номенклатура1 Документ2 2000 1 Номенклатура1 Документ3 3000 2 Номенклатура1 Документ4 3000 3 (15) Вы имеете в виду кодом? Да, если не получится буду кодить. Принцип распределения в том, что данные по обоим таблицам должны быть соеденены но количество строк умножиться не должно. |
|||
17
AceVi
17.06.16
✎
12:16
|
(8) А я все равно не понял - ну один раз и что?по каким правилам то? Просто берем из 2 таблицы номенклатуру1 и по порядку ее по 1 строке соединяем с первой таблицей?
Просто сделай внутри группировки по номенклатуре в каждой таблице порядковый номер в группировке Типа так Ном1 1500 0 Ном1 2500 1 Ном1 3000 2 Ном2 3500 0 И потом по номеру соединяй А сортировка в 1 и во 2 таблице у тебя по какому реквизиту? если по Номенклатура.ссылка то внутри строк Ном1 1500 и Ном1 2500 - они при каждом запросе будут на разных местах то 1500 первой строкой тот 2500. в общем у тебя ошибка заложена до этого шага - расскажи полностью задачу и решение. |
|||
18
Очевидно
17.06.16
✎
12:22
|
(16) не совсем понял что в итоге хочешь получить ...
но конкретно то что ты написал делается так : ВЫБРАТЬ "Номенклатура2" КАК Номенклатура, "Документ1" КАК Документ, 1000 КАК Сумма ПОМЕСТИТЬ НачальнаяТаблица ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Номенклатура1", "Документ2", 2000 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Номенклатура1", "Документ3", 3000 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Номенклатура1", "Документ4", 3000 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ НачальнаяТаблица.Номенклатура КАК Номенклатура, НачальнаяТаблица.Документ, НачальнаяТаблица.Сумма, КОЛИЧЕСТВО(РАЗЛИЧНЫЕ НачальнаяТаблица1.Документ) + 1 КАК ПорядковыйНомер ИЗ НачальнаяТаблица КАК НачальнаяТаблица ЛЕВОЕ СОЕДИНЕНИЕ НачальнаяТаблица КАК НачальнаяТаблица1 ПО НачальнаяТаблица.Номенклатура = НачальнаяТаблица1.Номенклатура И НачальнаяТаблица.Документ < НачальнаяТаблица1.Документ СГРУППИРОВАТЬ ПО НачальнаяТаблица.Номенклатура, НачальнаяТаблица.Документ, НачальнаяТаблица.Сумма УПОРЯДОЧИТЬ ПО Номенклатура УБЫВ, ПорядковыйНомер |
|||
19
camojiet
17.06.16
✎
12:47
|
(18) Да. Спасибо. Это то, что нужно. Только я не понял как это работает если честно. Буду медитировать.
|
|||
20
Очевидно
17.06.16
✎
13:34
|
(19) единственный момент ... когда будешь "нумеровать" таблицу 2 ... можешь столкнутся с проблеммой . Если таблица 2 с начальным (Идеальным видом :
Ном1 1500 0 Ном1 2500 1 Ном1 3000 2 Ном2 3500 0 Пронумеровать этим способом получится .. (т.к. суммы уникальные и нумерация будет по ним) , то таблица в один из дней примет вид : Ном1 1500 0 Ном1 1500 0 Ном1 3000 2 Ном2 3500 0 (Суммы совпали и они уже не уникальные ... поэтому у тебя появятся 2 строки с номером "0" ... нужно что-то более надежное ... типа документ или контрагент или что-то ещё , что точно будет уникальным (в первой таблице с этим всё просто) |
|||
21
Карупян
17.06.16
✎
13:35
|
проще нумеровать в обработке запроса
|
|||
22
Очевидно
17.06.16
✎
13:38
|
(21) речь в задаче о "Языке запросов" ...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |