|
Разъясните по ОБЪЕДИНИТЬ ВСЕ в запросе | ☑ | ||
---|---|---|---|---|
0
ValeriTim
17.08.15
✎
16:43
|
У меня запрос с временными таблицами, в которых формируются данные для последующего объединения. В итоге объединяются две таблицы с одинаковыми полями, но полученные из разных данных. В обеих таблицах есть (упрощенно) три поля: Контрагент, ДоговорКонтрагента и Сумма. Так вот проблема состоит в том, что если в первой таблице контрагент = NULL, то он не берется из второй, как я того ожидал ... Как быть?
|
|||
1
NcSteel
17.08.15
✎
16:44
|
А причем тут Объединение и "он не берется из второй".
Что бы брался из второй, то надо соединять |
|||
2
Попытка1С
17.08.15
✎
16:45
|
"то он не берется из второй, как я того ожидал"
ну ты явно погорячился с ожиданиями.. |
|||
3
Волшебник
модератор
17.08.15
✎
16:45
|
ОБЪЕДИНИТЬ ВСЕ просто соединяет две таблицы с одинаковым количеством полей
|
|||
4
18_plus
17.08.15
✎
16:45
|
объединить все - это взять первую таблицу и прилепить снизу вторую, никаких если там быть не может.
|
|||
5
Господин ПЖ
17.08.15
✎
16:45
|
куда не берет?
|
|||
6
Зеленый пень
17.08.15
✎
16:45
|
Как быть? Почитать, как работает ОБЪЕДИНИТЬ ВСЕ.
Лучше - в оригинальном виде sql: UNION ALL |
|||
7
ДенисЧ
17.08.15
✎
16:46
|
(6) берём первую таблицу, дописываем к ней снизу вторую.
Всё. |
|||
8
ValeriTim
17.08.15
✎
16:46
|
Понятно, что я не того ожидал ... Как быть ?
(5) никуда не берет :) |
|||
9
18_plus
17.08.15
✎
16:46
|
(8) а что нужно-то?
|
|||
10
Господин ПЖ
17.08.15
✎
16:46
|
>Как быть ?
бросить пить для начала |
|||
11
Живой Ископаемый
17.08.15
✎
16:47
|
2(8) полное соединение
|
|||
12
Necessitudo
17.08.15
✎
16:47
|
(8) Левое соединение, внутреннее соединение, полное соединение.
|
|||
13
ValeriTim
17.08.15
✎
16:48
|
Как дохрена тут всегда было юмористов ...
|
|||
14
Живой Ископаемый
17.08.15
✎
16:49
|
2(13) А сейчас уже все?
|
|||
15
ValeriTim
17.08.15
✎
16:49
|
(14) а ты сам то не видишь?
|
|||
16
CHerypga
17.08.15
✎
16:50
|
(0) вангую что нужно ОБЪЕДИНИТЬ ВСЕ сперва во временную таблицу, а затем сгруппировать
|
|||
17
ValeriTim
17.08.15
✎
16:52
|
(16) хреновая из тебя Ванга ... объединение то и не получается ...
|
|||
18
organizm
17.08.15
✎
16:58
|
может просто "ОБЪЕДИНИТЬ" ?
|
|||
19
Господин ПЖ
17.08.15
✎
16:59
|
юмористы давно кончились...
вокруг одни наркоманы |
|||
20
CHerypga
17.08.15
✎
16:59
|
(17) объединение не может не получиться. если колонки не совпадают, то вообще не взлетит, а если совпадают, то объединится в любом случае.
|
|||
21
itlikbez
17.08.15
✎
17:00
|
(18) Не может. Автору не нужно "просто объединить". Да собственно практически никому такая операция не нужна.
|
|||
22
ValeriTim
17.08.15
✎
17:07
|
Все четыре поля есть в обеих таблицах
Таблица 1 Контрагент | Договор | Номенклатура | Сумма Иванов | Дог 1 | Товар1 | 120 Петров | Дог 2 | NULL | NULL Таблица 2 Контрагент | Договор | Номенклатура | Сумма Иванов | Дог 1 | NULL | NULL Петров | Дог 2 | Товар 2 | 230 Должно получиться: Иванов | Дог 1 | Товар 1 | 120 Петров | Дог 2 | Товар 2 | 230 |
|||
23
DS
17.08.15
✎
17:10
|
Перед объединением убери записи с нуллами в обеих таблицах.
|
|||
24
ValeriTim
17.08.15
✎
17:11
|
(23) Как ?
|
|||
25
DS
17.08.15
✎
17:12
|
Вариантов есть. Но проще подправить имеющийся, чем выдумывать все возможные.
|
|||
26
Господин ПЖ
17.08.15
✎
17:13
|
>Должно получиться
от действия union all?? завязывай с грибами |
|||
27
Господин ПЖ
17.08.15
✎
17:14
|
>Перед объединением убери записи с нуллами в обеих таблицах.
а смысл |
|||
28
sash-ml
17.08.15
✎
17:14
|
как то так
имеющие не Товар ЕСТЬ NULL |
|||
29
Господин ПЖ
17.08.15
✎
17:15
|
>имеющие не Товар ЕСТЬ NULL
убирай, Зина, водку... |
|||
30
Живой Ископаемый
17.08.15
✎
17:16
|
это какой-то стремный мистец. человеку уже подсказали, а он продолжает тупить
|
|||
31
ValeriTim
17.08.15
✎
17:18
|
(30) Где, блин, где эта подсказка ?
|
|||
32
DS
17.08.15
✎
17:18
|
(27) Чтобы получить нужное:
Таблица 1: Контрагент | Договор | Номенклатура | Сумма Иванов | Дог 1 | Товар1 | 120 Таблица 2: Контрагент | Договор | Номенклатура | Сумма Петров | Дог 2 | Товар 2 | 230 Получим: Иванов | Дог 1 | Товар 1 | 120 Петров | Дог 2 | Товар 2 | 230 |
|||
33
Бубка Гоп
17.08.15
✎
17:19
|
(29) имеющие? О_о
|
|||
34
ValeriTim
17.08.15
✎
17:20
|
(32) я не могу выборку построить так. Вопросов бы не было.
|
|||
35
Бубка Гоп
17.08.15
✎
17:21
|
(31) хоспади...
убери из результата нуллы и объедини все. чего непонятно то? |
|||
36
18_plus
17.08.15
✎
17:21
|
можно и не убирать, а сгруппировать по договору и контрагенту. и написать СУММА(ЕСТЬNULL(ПолеСумма, 0))
|
|||
37
Бубка Гоп
17.08.15
✎
17:21
|
(34) Где НЕ Товар ЕСТЬ NULL
|
|||
38
Господин ПЖ
17.08.15
✎
17:22
|
(32) а...в этом смысле
откуда вообще взялись Петров | Дог 2 | NULL | NULL Иванов | Дог 1 | NULL | NULL почему товаров нет |
|||
39
Господин ПЖ
17.08.15
✎
17:22
|
(36) а товар выкинуть?
|
|||
40
Бубка Гоп
17.08.15
✎
17:23
|
(36) он привел не все поля запроса. если их там много, заколебется формулки рисовать для группировки и суммирования
|
|||
41
18_plus
17.08.15
✎
17:25
|
(39) ну пропустил, чего придираешься?
(40) проблемы индейцев шерифа не волнуют. |
|||
42
DS
17.08.15
✎
17:26
|
(34) Семен Семеныч...
ВЫБРАТЬ т1.Контра, т1.Дог, т1.Товар, т1.Сумма ИЗ т1 КАК т1 ГДЕ НЕ т1.Сумма ЕСТЬ NULL ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ т2.Контра, т2.Дог, т2.Товар, т2.Сумма ИЗ т2 КАК т2 ГДЕ НЕ т2.Сумма ЕСТЬ NULL |
|||
43
ValeriTim
17.08.15
✎
17:30
|
Вот выложу весь запрос. Не спрашивайте почему сделано так - это далеко не финальный его вариант - будет еще изменяться.
ВЫБРАТЬ СебестоимостьРабот.СубконтоДт1 КАК ОбъектСтроительства, СебестоимостьРабот.СубконтоДт2 КАК СтатьяЗатрат, СебестоимостьРабот.СубконтоДт3 КАК ВидРабот, ВЫБОР КОГДА ТИПЗНАЧЕНИЯ(СебестоимостьРабот.СубконтоКт1) = ТИП(Справочник.Контрагенты) ТОГДА СебестоимостьРабот.СубконтоКт1 КОГДА ТИПЗНАЧЕНИЯ(СебестоимостьРабот.СубконтоКт3) = ТИП(Документ.ПоступлениеТоваровУслуг) ТОГДА СебестоимостьРабот.СубконтоКт3.Контрагент КОГДА ТИПЗНАЧЕНИЯ(СебестоимостьРабот.СубконтоКт3) = ТИП(Документ.АвансовыйОтчет) ТОГДА СебестоимостьРабот.СубконтоКт3.ФизЛицо ИНАЧЕ NULL КОНЕЦ КАК Контрагент, ВЫБОР КОГДА ТИПЗНАЧЕНИЯ(СебестоимостьРабот.СубконтоКт1) = ТИП(Справочник.Номенклатура) ТОГДА СебестоимостьРабот.СубконтоКт1 ИНАЧЕ NULL КОНЕЦ КАК Затратра, ВЫБОР КОГДА ТИПЗНАЧЕНИЯ(СебестоимостьРабот.СубконтоКт3) = ТИП(Документ.ПоступлениеТоваровУслуг) ТОГДА СебестоимостьРабот.СубконтоКт3 ИНАЧЕ NULL КОНЕЦ КАК ДокументПоступления, СебестоимостьРабот.Регистратор, СебестоимостьРабот.СуммаОборот КАК Сумма ПОМЕСТИТЬ ОборотыСч08 ИЗ РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(&НачалоПериода, &КонецПериода, Авто, СчетДт = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.СтроительствоОбъектовОсновныхСредств), , , , Организация = &Организация) КАК СебестоимостьРабот ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ПоступлениеТоваровУслуг.Ссылка, ПоступлениеТоваровУслуг.Контрагент, ПоступлениеТоваровУслуг.ДоговорКонтрагента, ПоступлениеТоваровУслугОбъектыСтроительства.ОбъектСтроительства, ПоступлениеТоваровУслугОбъектыСтроительства.СтатьяЗатрат, ПоступлениеТоваровУслугОбъектыСтроительства.ВидРабот, ПоступлениеТоваровУслугОбъектыСтроительства.Сумма, ПоступлениеТоваровУслугОбъектыСтроительства.СтавкаНДС, ПоступлениеТоваровУслугОбъектыСтроительства.СуммаНДС, ВЫБОР КОГДА ПоступлениеТоваровУслуг.СуммаВключаетНДС ТОГДА ПоступлениеТоваровУслугОбъектыСтроительства.Сумма ИНАЧЕ ПоступлениеТоваровУслугОбъектыСтроительства.Сумма + ПоступлениеТоваровУслугОбъектыСтроительства.СуммаНДС КОНЕЦ КАК СуммаВсего ПОМЕСТИТЬ ПоступленияОбъектСтроительства ИЗ Документ.ПоступлениеТоваровУслуг.ОбъектыСтроительства КАК ПоступлениеТоваровУслугОбъектыСтроительства ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг ПО ПоступлениеТоваровУслугОбъектыСтроительства.Ссылка = ПоступлениеТоваровУслуг.Ссылка ГДЕ ПоступлениеТоваровУслугОбъектыСтроительства.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ПоступлениеТоваровУслуг.Ссылка, ПоступлениеТоваровУслуг.Склад, ПоступлениеТоваровУслуг.Контрагент, ПоступлениеТоваровУслуг.ДоговорКонтрагента, ПоступлениеТоваровУслугТовары.Номенклатура, ПоступлениеТоваровУслугТовары.Количество, ПоступлениеТоваровУслугТовары.Сумма, ПоступлениеТоваровУслугТовары.СтавкаНДС, ПоступлениеТоваровУслугТовары.СуммаНДС, ВЫБОР КОГДА ПоступлениеТоваровУслуг.СуммаВключаетНДС ТОГДА ПоступлениеТоваровУслугТовары.Сумма ИНАЧЕ ПоступлениеТоваровУслугТовары.Сумма + ПоступлениеТоваровУслугТовары.СуммаНДС КОНЕЦ КАК СуммаВсего ПОМЕСТИТЬ ПоступленияТоварыУслуги ИЗ Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг ПО ПоступлениеТоваровУслугТовары.Ссылка = ПоступлениеТоваровУслуг.Ссылка ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ПоступленияОбъектСтроительства.Контрагент, ПоступленияОбъектСтроительства.ДоговорКонтрагента, ОборотыСч08.ОбъектСтроительства, ОборотыСч08.СтатьяЗатрат, ОборотыСч08.ВидРабот, ОборотыСч08.Затратра, ОборотыСч08.ДокументПоступления, ОборотыСч08.Регистратор, ПоступленияОбъектСтроительства.Сумма, ПоступленияОбъектСтроительства.СтавкаНДС, ПоступленияОбъектСтроительства.СуммаНДС, ПоступленияОбъектСтроительства.СуммаВсего ПОМЕСТИТЬ Счет08ОбъектСтроительства ИЗ ОборотыСч08 КАК ОборотыСч08 ЛЕВОЕ СОЕДИНЕНИЕ ПоступленияОбъектСтроительства КАК ПоступленияОбъектСтроительства ПО ОборотыСч08.ОбъектСтроительства = ПоступленияОбъектСтроительства.ОбъектСтроительства И ОборотыСч08.СтатьяЗатрат = ПоступленияОбъектСтроительства.СтатьяЗатрат И ОборотыСч08.ВидРабот = ПоступленияОбъектСтроительства.ВидРабот И ОборотыСч08.Регистратор = ПоступленияОбъектСтроительства.Ссылка ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ПоступленияТоварыУслуги.Контрагент, ПоступленияТоварыУслуги.ДоговорКонтрагента, ОборотыСч08.ОбъектСтроительства, ОборотыСч08.СтатьяЗатрат, ОборотыСч08.ВидРабот, ОборотыСч08.Затратра, ОборотыСч08.ДокументПоступления, ОборотыСч08.Регистратор, ПоступленияТоварыУслуги.Сумма, ПоступленияТоварыУслуги.СтавкаНДС, ПоступленияТоварыУслуги.СуммаНДС, ПоступленияТоварыУслуги.СуммаВсего ПОМЕСТИТЬ Счет08Товары ИЗ ОборотыСч08 КАК ОборотыСч08 ЛЕВОЕ СОЕДИНЕНИЕ ПоступленияТоварыУслуги КАК ПоступленияТоварыУслуги ПО ОборотыСч08.Затратра = ПоступленияТоварыУслуги.Номенклатура И ОборотыСч08.ДокументПоступления = ПоступленияТоварыУслуги.Ссылка ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Счет08ОбъектСтроительства.Контрагент, Счет08ОбъектСтроительства.ДоговорКонтрагента, Счет08ОбъектСтроительства.ОбъектСтроительства, Счет08ОбъектСтроительства.СтатьяЗатрат, Счет08ОбъектСтроительства.ВидРабот, Счет08ОбъектСтроительства.Затратра, Счет08ОбъектСтроительства.ДокументПоступления, Счет08ОбъектСтроительства.Регистратор, Счет08ОбъектСтроительства.Сумма, Счет08ОбъектСтроительства.СтавкаНДС, Счет08ОбъектСтроительства.СуммаНДС, Счет08ОбъектСтроительства.СуммаВсего ИЗ Счет08ОбъектСтроительства КАК Счет08ОбъектСтроительства ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ Счет08Товары.Контрагент, Счет08Товары.ДоговорКонтрагента, Счет08Товары.ОбъектСтроительства, Счет08Товары.СтатьяЗатрат, Счет08Товары.ВидРабот, Счет08Товары.Затратра, Счет08Товары.ДокументПоступления, Счет08Товары.Регистратор, Счет08Товары.Сумма, Счет08Товары.СтавкаНДС, Счет08Товары.СуммаНДС, Счет08Товары.СуммаВсего ИЗ Счет08Товары КАК Счет08Товары |
|||
44
Бубка Гоп
17.08.15
✎
17:31
|
(43) зачем ты это сюда вывалил? тебе уже разжевали как делать надо, неужели непонятно?
|
|||
45
ValeriTim
17.08.15
✎
17:35
|
(44) все дело в том, что нельзя опереться на сумму для отбрасывания полей NULL - она всегда заполнена - это пока оборот 08 счета, а вот остальные поля заполняются по разному - могут быть заполнены, а могут и нет, а оборот должен остаться верным. По этому не получится фишка с отбрасыванием строк с NULL
|
|||
46
18_plus
17.08.15
✎
17:37
|
скопируй условия с типами документов в ГДЕ, и нулов не будет.
|
|||
47
ValeriTim
17.08.15
✎
17:41
|
(46) да они должны быть - иначе оборот 08 счета не сойдется
|
|||
48
Бубка Гоп
17.08.15
✎
17:41
|
(45) можно нескромный вопрос, а какого фейхоа запрос по документам делаешь?
|
|||
49
18_plus
17.08.15
✎
17:45
|
(47) куда не сойдётся? если ты один фик от null избавляться собрался?
|
|||
50
ValeriTim
17.08.15
✎
17:45
|
(48) мне нужно НДС достать
|
|||
51
ValeriTim
17.08.15
✎
17:46
|
(49) это где я такое сказал?
|
|||
52
18_plus
17.08.15
✎
17:46
|
(49) ты хочешь, чтобы там где null система сама придумала какого контрагента поставить?
|
|||
53
ValeriTim
17.08.15
✎
17:51
|
нет - для этого я сформировал 1 запрос - заполняющий "основную" часть - эта часть для всех последующих одинакова
|
|||
54
Mirnin
17.08.15
✎
17:52
|
ну (12) же, нет?
|
|||
55
DS
17.08.15
✎
17:53
|
(45) Тогда меняй нуллы нулями и пустыми ссылками, а потом группируй (суммы по сумме, ссылки по максимуму). Но все это, конечно, копрокодинг...
|
|||
56
ValeriTim
17.08.15
✎
17:55
|
(54) думал ... но либо придется в многих местах писать ЕСТЬNULL()
(55) или так ... |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |