|
Соединить 2 таблицы в запросе | ☑ | ||
---|---|---|---|---|
0
iogann1691
02.02.17
✎
11:34
|
Всем доброго времени суток.
Нужно соединить 2 таблицы в запросе, т.е. 1-ая таблица |Работник|Начисление|СуммаНачисление |Иванов |Оклад |15000 2-ая таблица |Работник|Удержание|СуммаУдержание |Иванов |ОПВ |1500 |Иванов |ИПН |1200 Нужно чтобы получилось |Работник|Начисление|Удержание|СуммаНачисление|СуммаУдержание |Иванов |Оклад |ОПВ |15000 |1500 |Иванов | |ИПН | |1200 Нужно именно в запросе, делаю на СКД, постобработку не предлагать |
|||
1
Ёпрст
02.02.17
✎
11:39
|
А почему, не так, например ?
|Работник|Начисление|Удержание|СуммаНачисление|СуммаУдержание |Иванов |Оклад |ИПН |15000 |1200 |Иванов | |ОПВ | |1500 |
|||
2
Ёпрст
02.02.17
✎
11:40
|
По какому принципу будешь "скрещивать" ?
Так-то, обычным юнионом у тебя только так выйдет: |Работник|Начисление|Удержание|СуммаНачисление|СуммаУдержание |Иванов |Оклад | |15000 | |Иванов | |ОПВ | |1500 |Иванов | |ИПН | |1200 |
|||
3
Defender aka LINN
02.02.17
✎
11:41
|
Нужно - делай. Мы не возражаем.
|
|||
4
iogann1691
02.02.17
✎
11:41
|
(1) (2) так вот и я про то же, поэтому и пришел за помощью
|
|||
5
Жан Пердежон
02.02.17
✎
11:41
|
Предлагаю так:
|Работник|Начисление/Удержание|Сумма |Иванов |Оклад |15000 |Иванов |ИПН |-1500 |Иванов |ОПВ |-1200 |
|||
6
mkalimulin
02.02.17
✎
11:42
|
(0) Тут вам без нумерации строк таблицы не обойтись.
Еще эта задача называется "накопительный итог в запросе". Поищите примеры решения. Пользуйтесь конструктором JUG. http://catalog.mista.ru/public/569569/ Там есть библиотека шаблонов и этот случай тоже. |
|||
7
iogann1691
02.02.17
✎
11:43
|
(5) так не пойдет, т.к. СКД с размеченными областями, чтобы было понятнее принцип расчетного листка
Начисления| Удержания Оклад | ОПВ | ИПН |
|||
8
Жан Пердежон
02.02.17
✎
11:45
|
Добавь колонку с номером и по нему соединяй
|
|||
9
iogann1691
02.02.17
✎
11:46
|
(8) вариант, сейчас попробую
|
|||
10
AlexTim03
02.02.17
✎
11:48
|
Объединение таблиц + группировка.
Все. |
|||
11
AlexTim03
02.02.17
✎
11:50
|
выбрать
Работник, Начисления, СуммаНачисления, Неопределено КАК Удержания, 0 КАК СуммаУдержания объединить Работник, Неопределено 0, Удержания, СуммаУдержания |
|||
12
iogann1691
02.02.17
✎
11:50
|
(10) (11)
ВЫБРАТЬ ВложенныйЗапрос.Работник КАК Работник, ВложенныйЗапрос.ВидРасчетаНачисление КАК ВидРасчетаНачисление, ВложенныйЗапрос.РазмерНачисление КАК РазмерНачисление, ВложенныйЗапрос.СуммаНачисление КАК СуммаНачисление, ВложенныйЗапрос.ВидРасчетаУдержание КАК ВидРасчетаУдержание, ВложенныйЗапрос.РазмерУдержание КАК РазмерУдержание, ВложенныйЗапрос.СуммаУдержание КАК СуммаУдержание ИЗ (ВЫБРАТЬ АВВзаиморасчетыСРаботникамиУчрежденийОбороты.Работник КАК Работник, АВВзаиморасчетыСРаботникамиУчрежденийОбороты.ВидРасчета КАК ВидРасчетаНачисление, АВВзаиморасчетыСРаботникамиУчрежденийОбороты.РазмерПриход КАК РазмерНачисление, АВВзаиморасчетыСРаботникамиУчрежденийОбороты.СуммаВзаиморасчетаПриход КАК СуммаНачисление, NULL КАК ВидРасчетаУдержание, NULL КАК РазмерУдержание, NULL КАК СуммаУдержание ИЗ РегистрНакопления.АВВзаиморасчетыСРаботникамиУчреждений.Обороты(, , , ВидОперации = ЗНАЧЕНИЕ(Перечисление.АВВидыОперацийВзаиморасчетов.Начисление)) КАК АВВзаиморасчетыСРаботникамиУчрежденийОбороты ОБЪЕДИНИТЬ ВЫБРАТЬ АВВзаиморасчетыСРаботникамиУчрежденийОбороты.Работник, NULL, NULL, NULL, АВВзаиморасчетыСРаботникамиУчрежденийОбороты.ВидРасчета, АВВзаиморасчетыСРаботникамиУчрежденийОбороты.РазмерПриход, АВВзаиморасчетыСРаботникамиУчрежденийОбороты.СуммаВзаиморасчетаПриход ИЗ РегистрНакопления.АВВзаиморасчетыСРаботникамиУчреждений.Обороты(, , , ВидОперации = ЗНАЧЕНИЕ(Перечисление.АВВидыОперацийВзаиморасчетов.Удержание)) КАК АВВзаиморасчетыСРаботникамиУчрежденийОбороты) КАК ВложенныйЗапрос УПОРЯДОЧИТЬ ПО Работник АВТОУПОРЯДОЧИВАНИЕ |
|||
13
mkalimulin
02.02.17
✎
11:50
|
(11) Продолжай.
|
|||
14
iogann1691
02.02.17
✎
11:51
|
(12) так не работает
|
|||
15
Жан Пердежон
02.02.17
✎
11:52
|
(14) ясен пень, в (10) (11) херню насоветовали
|
|||
16
iogann1691
02.02.17
✎
12:25
|
(15) получилось так же как и в (12)
ВЫБРАТЬ АВВзаиморасчетыСРаботникамиУчрежденийОбороты.Работник КАК Работник, 1 КАК НомерСтроки ПОМЕСТИТЬ ВТ_НомераНачисления ИЗ РегистрНакопления.АВВзаиморасчетыСРаботникамиУчреждений.Обороты(, , , ВидОперации = ЗНАЧЕНИЕ(Перечисление.АВВидыОперацийВзаиморасчетов.Начисление)) КАК АВВзаиморасчетыСРаботникамиУчрежденийОбороты ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ АВВзаиморасчетыСРаботникамиУчрежденийОбороты.Работник КАК Работник, 1 КАК НомерСтроки ПОМЕСТИТЬ ВТ_НомераУдержания ИЗ РегистрНакопления.АВВзаиморасчетыСРаботникамиУчреждений.Обороты(, , , ВидОперации = ЗНАЧЕНИЕ(Перечисление.АВВидыОперацийВзаиморасчетов.Удержание)) КАК АВВзаиморасчетыСРаботникамиУчрежденийОбороты ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ АВВзаиморасчетыСРаботникамиУчрежденийОбороты.Работник КАК Работник, СУММА(ВТ_НомераНачисления.НомерСтроки) КАК НомерСтроки, АВВзаиморасчетыСРаботникамиУчрежденийОбороты.ВидРасчета КАК ВидРасчета, АВВзаиморасчетыСРаботникамиУчрежденийОбороты.РазмерПриход КАК РазмерПриход, АВВзаиморасчетыСРаботникамиУчрежденийОбороты.СуммаВзаиморасчетаПриход КАК СуммаВзаиморасчетаПриход ПОМЕСТИТЬ ВТ_Начисления ИЗ РегистрНакопления.АВВзаиморасчетыСРаботникамиУчреждений.Обороты(, , , ВидОперации = ЗНАЧЕНИЕ(Перечисление.АВВидыОперацийВзаиморасчетов.Начисление)) КАК АВВзаиморасчетыСРаботникамиУчрежденийОбороты ЛЕВОЕ СОЕДИНЕНИЕ ВТ_НомераНачисления КАК ВТ_НомераНачисления ПО АВВзаиморасчетыСРаботникамиУчрежденийОбороты.Работник <= ВТ_НомераНачисления.Работник СГРУППИРОВАТЬ ПО АВВзаиморасчетыСРаботникамиУчрежденийОбороты.Работник, АВВзаиморасчетыСРаботникамиУчрежденийОбороты.ВидРасчета, АВВзаиморасчетыСРаботникамиУчрежденийОбороты.РазмерПриход, АВВзаиморасчетыСРаботникамиУчрежденийОбороты.СуммаВзаиморасчетаПриход ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ АВВзаиморасчетыСРаботникамиУчрежденийОбороты.Работник КАК Работник, СУММА(ВТ_НомераУдержания.НомерСтроки) КАК НомерСтроки, АВВзаиморасчетыСРаботникамиУчрежденийОбороты.ВидРасчета КАК ВидРасчета, АВВзаиморасчетыСРаботникамиУчрежденийОбороты.РазмерПриход КАК РазмерПриход, АВВзаиморасчетыСРаботникамиУчрежденийОбороты.СуммаВзаиморасчетаПриход КАК СуммаВзаиморасчетаПриход ПОМЕСТИТЬ ВТ_Удержания ИЗ РегистрНакопления.АВВзаиморасчетыСРаботникамиУчреждений.Обороты(, , , ВидОперации = ЗНАЧЕНИЕ(Перечисление.АВВидыОперацийВзаиморасчетов.Удержание)) КАК АВВзаиморасчетыСРаботникамиУчрежденийОбороты ЛЕВОЕ СОЕДИНЕНИЕ ВТ_НомераУдержания КАК ВТ_НомераУдержания ПО АВВзаиморасчетыСРаботникамиУчрежденийОбороты.Работник <= ВТ_НомераУдержания.Работник СГРУППИРОВАТЬ ПО АВВзаиморасчетыСРаботникамиУчрежденийОбороты.Работник, АВВзаиморасчетыСРаботникамиУчрежденийОбороты.ВидРасчета, АВВзаиморасчетыСРаботникамиУчрежденийОбороты.РазмерПриход, АВВзаиморасчетыСРаботникамиУчрежденийОбороты.СуммаВзаиморасчетаПриход ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ_Начисления.Работник КАК Работник, ВТ_Начисления.НомерСтроки КАК НомерСтроки, ВТ_Начисления.ВидРасчета КАК ВидРасчета, ВТ_Начисления.РазмерПриход КАК РазмерПриход, ВТ_Начисления.СуммаВзаиморасчетаПриход КАК СуммаВзаиморасчетаПриход, ВТ_Удержания.ВидРасчета КАК ВидРасчета1, ВТ_Удержания.РазмерПриход КАК РазмерПриход1, ВТ_Удержания.СуммаВзаиморасчетаПриход КАК СуммаВзаиморасчетаПриход1 ИЗ ВТ_Начисления КАК ВТ_Начисления ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Удержания КАК ВТ_Удержания ПО ВТ_Начисления.НомерСтроки = ВТ_Удержания.НомерСтроки |
|||
17
mkalimulin
02.02.17
✎
12:43
|
(16) Я же говорю - номера генерить надо. Взял первую таблицу, пронумеровал. Взял вторую таблицу, пронумеровал.
|
|||
18
iogann1691
02.02.17
✎
12:50
|
(17) предлагаете нумеровать строки по видам расчета?
|
|||
19
Ёпрст
02.02.17
✎
12:51
|
(18) нумеровать нужно по работничку, потом соединение по работничку и по этому нумеру.
|
|||
20
iogann1691
02.02.17
✎
12:56
|
(19) так я и пронумеровал по работничку в (16)
|
|||
21
mkalimulin
02.02.17
✎
12:59
|
(20) Неправильно пронумеровали.
|
|||
22
iogann1691
02.02.17
✎
13:00
|
(21) готов принять поправку
|
|||
23
mkalimulin
02.02.17
✎
13:03
|
(22) Долго объяснять. Посмотрите пример решения задачи "накопительный итог в запросе". Это ваш случай.
|
|||
24
Ёпрст
02.02.17
✎
13:03
|
(20) в каком месте ? Присвоив всем работникам одинаковый номер в виде единички ?
|
|||
25
iogann1691
02.02.17
✎
13:07
|
(24) где вы там одинаковый номер видели?
|
|||
26
Ёпрст
02.02.17
✎
13:08
|
(25)
1 КАК НомерСтроки |
|||
27
iogann1691
02.02.17
✎
13:09
|
(26) а как же далее?
СУММА(ВТ_НомераНачисления.НомерСтроки) КАК НомерСтроки, .... ЛЕВОЕ СОЕДИНЕНИЕ ВТ_НомераНачисления КАК ВТ_НомераНачисления ПО АВВзаиморасчетыСРаботникамиУчрежденийОбороты.Работник <= ВТ_НомераНачисления.Работник |
|||
28
iogann1691
02.02.17
✎
13:09
|
(26) очень даже нумеруются работники, старый, давно рабочий пример
|
|||
29
Ёпрст
02.02.17
✎
13:10
|
(27) Далее не смотрел, ибо не интересно
|
|||
30
Ёпрст
02.02.17
✎
13:12
|
Ибо последний запрос не верный, там где иннер джоин у тебя
|
|||
31
Ёпрст
02.02.17
✎
13:12
|
ибо таким образом ты херишь строки, где удержаний или начислений больше.. ты оставляешь только совпадения по номеру строки.
|
|||
32
iogann1691
02.02.17
✎
13:14
|
допустим это будет так:
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Удержания КАК ВТ_Удержания ПО (ВТ_Начисления.Работник = ВТ_Удержания.Работник И ВТ_Начисления.НомерСтроки = ВТ_Удержания.НомерСтроки) все равно тот же результат |
|||
33
Ёпрст
02.02.17
✎
13:25
|
(32) Допустим, это не верно, см. (31)
|
|||
34
iogann1691
02.02.17
✎
15:40
|
(33) не спорю, раз неверно отрабатывает
|
|||
35
Ёпрст
02.02.17
✎
15:58
|
(34) И ? Мыслей нема, что ле ?
ЕстьNULL(ВТ_Начисления.Работник,ВТ_Удержания.Работник) КАК Работник, ...... Полное Соединение ВТ_Удержания КАК ВТ_Удержания ПО (ВТ_Начисления.Работник = ВТ_Удержания.Работник И ВТ_Начисления.НомерСтроки = ВТ_Удержания.НомерСтроки) |
|||
36
iogann1691
03.02.17
✎
13:51
|
(35) (21) (15)
всем спасибо, получилось вот так: //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ_Начисления.ВидРасчета КАК ВидРасчетаНачисление, ВТ_Начисления.Работник КАК РаботникНачисление, КОЛИЧЕСТВО(ВТ_Начисления1.ВидРасчета) КАК НомерСтрокиНачисление, ВТ_Начисления.РазмерПриход КАК РазмерНачисление, ВТ_Начисления.СуммаВзаиморасчетаПриход КАК СуммаНачисление ПОМЕСТИТЬ ВТ_НумерованныеНачисления ИЗ ВТ_Начисления КАК ВТ_Начисления ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Начисления КАК ВТ_Начисления1 ПО ВТ_Начисления.ВидРасчета.Наименование >= ВТ_Начисления1.ВидРасчета.Наименование И ВТ_Начисления.Работник = ВТ_Начисления1.Работник СГРУППИРОВАТЬ ПО ВТ_Начисления.ВидРасчета, ВТ_Начисления.Работник, ВТ_Начисления.РазмерПриход, ВТ_Начисления.СуммаВзаиморасчетаПриход ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ_Удержания.ВидРасчета КАК ВидРасчетаУдержание, ВТ_Удержания.Работник КАК РаботникУдержание, КОЛИЧЕСТВО(ВТ_Удержания1.ВидРасчета) КАК НомерСтрокиУдержание, ВТ_Удержания.РазмерПриход КАК РазмерУдержание, ВТ_Удержания.СуммаВзаиморасчетаПриход КАК СуммаУдержание ПОМЕСТИТЬ ВТ_НумерованныеУдержания ИЗ ВТ_Удержания КАК ВТ_Удержания ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Удержания КАК ВТ_Удержания1 ПО ВТ_Удержания.ВидРасчета.Наименование >= ВТ_Удержания1.ВидРасчета.Наименование И ВТ_Удержания.Работник = ВТ_Удержания1.Работник СГРУППИРОВАТЬ ПО ВТ_Удержания.ВидРасчета, ВТ_Удержания.Работник, ВТ_Удержания.РазмерПриход, ВТ_Удержания.СуммаВзаиморасчетаПриход ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ_НумерованныеНачисления.НомерСтрокиНачисление КАК НомерСтрокиНачисление, ВТ_НумерованныеНачисления.РаботникНачисление КАК РаботникНачисление, ВТ_НумерованныеНачисления.ВидРасчетаНачисление, ВТ_НумерованныеНачисления.РазмерНачисление, ВТ_НумерованныеНачисления.СуммаНачисление, ВТ_НумерованныеУдержания.НомерСтрокиУдержание, ВТ_НумерованныеУдержания.ВидРасчетаУдержание, ВТ_НумерованныеУдержания.РазмерУдержание, ВТ_НумерованныеУдержания.СуммаУдержание ИЗ ВТ_НумерованныеНачисления КАК ВТ_НумерованныеНачисления ПОЛНОЕ СОЕДИНЕНИЕ ВТ_НумерованныеУдержания КАК ВТ_НумерованныеУдержания ПО ВТ_НумерованныеНачисления.РаботникНачисление = ВТ_НумерованныеУдержания.РаботникУдержание И ВТ_НумерованныеНачисления.НомерСтрокиНачисление = ВТ_НумерованныеУдержания.НомерСтрокиУдержание УПОРЯДОЧИТЬ ПО РаботникНачисление, НомерСтрокиНачисление может кому пригодится |
|||
37
DrZombi
гуру
03.02.17
✎
14:19
|
(36) Спасибо, но мы как то без этого ужаса :)
|
|||
38
Ёпрст
03.02.17
✎
14:31
|
(36) см. (35) - у тебя у половины строк, может не оказаться работничка и других реквизитов при полном соединении, нужно ЕстьNULL втыкать из двух табличек в селекте.
|
|||
39
iogann1691
04.02.17
✎
07:32
|
(38) точно, спасибо, воспользовался ЕСТЬNULL и все гуд
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |