Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Соединить 3 таблицы  [new]
asdor
Member

Откуда: Москва
Сообщений: 468
Требуется найти отрицательные остатки на текущую дату по заказчику и договору.
Есть 3 таблицы.
FinbalContract - Выверенные остатки на дату
И таблица платежей и продаж.

Нарисовал запрос
select isnull(f.sm,0)+isnull(p.sm,0)-isnull(s.sm,0) sm,isnull(f.id_custom,ISNULL(p.id_custom,s.id_custom)) id_custom,ISNULL(f.dogid,isnull(p.id_dog,s.id_dog)) id_dog from 
	(SELECT sm, ID_CUSTOM, DogID 
		FROM dbo.FinbalContract
		WHERE dat = '20171201'
			and ismark=0
		) AS f 
	full join
	(SELECT SUM(sm) AS sm, id_custom,  id_dog
		FROM dbo.Pay AS p
		WHERE dat >= '20171201'
			and ismark=0
		GROUP BY id_custom, id_dog) as p 
	on p.id_custom=f.ID_CUSTOM and p.id_dog=f.DogID		 
	full join
	(SELECT SUM(sm) AS sm, ID_CUSTOM, id_dog
		FROM dbo.sale
		WHERE dat >= '20171201' 
			AND ismark = 0
		GROUP BY ID_CUSTOM, id_dog) as s
		on p.id_custom=s.ID_CUSTOM and p.id_dog=s.id_dog

Но как соединить 3 таблицы, что бы не было повторов заказчиков (договоров)?
16 янв 18, 12:22    [21110109]     Ответить | Цитировать Сообщить модератору
 Re: Соединить 3 таблицы  [new]
Rivkin Dmitry
Member

Откуда: Israel
Сообщений: 5497
asdor,

Наверное, нужно добавить еще одну выборку - уникальную таблицу заказчиков и договоров и уже к ней джоинить остальные три запроса:

select ID_CUSTOM, DogID 
FROM dbo.FinbalContract
WHERE dat = '20171201'
    and ismark=0
union
select id_custom,  id_dog
FROM dbo.Pay AS p
WHERE dat >= '20171201'
and ismark=0
GROUP BY id_custom, id_dog
union
select ID_CUSTOM, id_dog
FROM dbo.sale
WHERE dat >= '20171201' 
AND ismark = 0

GROUP BY ID_CUSTOM, id_dog
16 янв 18, 12:47    [21110228]     Ответить | Цитировать Сообщить модератору
 Re: Соединить 3 таблицы  [new]
Rivkin Dmitry
Member

Откуда: Israel
Сообщений: 5497
sorry:
select ID_CUSTOM, DogID 
FROM dbo.FinbalContract
WHERE dat = '20171201'
    and ismark=0
union
select id_custom,  id_dog
FROM dbo.Pay AS p
WHERE dat >= '20171201'
and ismark=0
GROUP BY id_custom, id_dog
union
select ID_CUSTOM, id_dog
FROM dbo.sale
WHERE dat >= '20171201' 
AND ismark = 0
GROUP BY ID_CUSTOM, id_dog
16 янв 18, 12:49    [21110241]     Ответить | Цитировать Сообщить модератору
 Re: Соединить 3 таблицы  [new]
asdor
Member

Откуда: Москва
Сообщений: 468
Rivkin Dmitry,
Да. Спасибо. Уже сообразил.
16 янв 18, 12:59    [21110291]     Ответить | Цитировать Сообщить модератору
 Re: Соединить 3 таблицы  [new]
asdor
Member

Откуда: Москва
Сообщений: 468
asdor,
Только почему и зачем union ?
Я просто соединил с исходными таблицами
16 янв 18, 13:00    [21110298]     Ответить | Цитировать Сообщить модератору
 Re: Соединить 3 таблицы  [new]
Massa52
Member

Откуда:
Сообщений: 373
asdor,
Таблицы еще бы нарисовали - цена бы вам не было.
Лом напрягаться без примеров таблиц.
16 янв 18, 13:01    [21110306]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить