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

Откуда: Стольный град село Партизанское
Сообщений: 166
Структура из один эс:

Таблица1
Товар Продано
===========
1         3

Таблица2
Товар Вернули
===========
2         13

Таблица3
Товар Название
===========
1        First
2        Second
3        Third

Надо:
Название Купили Вернули
===========
First        3         0
Second    0         13


Dr O
6 июн 05, 19:35    [1600881]     Ответить | Цитировать Сообщить модератору
 Re: Как объединить в запросе таблицы реализации и возвратов  [new]
itON
Member

Откуда: Москва
Сообщений: 391
JOIN'ами прекрасно получится
6 июн 05, 19:56    [1600924]     Ответить | Цитировать Сообщить модератору
 Re: Как объединить в запросе таблицы реализации и возвратов  [new]
BusyMan
Member

Откуда: Москва
Сообщений: 4927
SELECT 	Товары.Товар, Товары.НазваниеТовара
	, 	SUM(ISNULL(T1.Продано,0)) 	as Продано
	, 	SUM(ISNULL(T1.Возвращено,0)) 	as Возвращено
FROM Товары 
	JOIN	ПродажаТоваров T1 ON (T1.Товар=Товары.Товар)
	JOIN	ВозвратТоваров T2 ON (T2.Товар=Товары.Товар)
GROUP BY Товары.Товар, Товары.НазваниеТовара

P.S. Можно просто Бизик admin@busyman.ru ICQ# 131833549
6 июн 05, 20:32    [1600977]     Ответить | Цитировать Сообщить модератору
 Re: Как объединить в запросе таблицы реализации и возвратов  [new]
Доктор Омельченко
Member [заблокирован]

Откуда: Стольный град село Партизанское
Сообщений: 166
BusyMan
SELECT 	Товары.Товар, Товары.НазваниеТовара
	, 	SUM(ISNULL(T1.Продано,0)) 	as Продано
	, 	SUM(ISNULL(T1.Возвращено,0)) 	as Возвращено
FROM Товары 
	JOIN	ПродажаТоваров T1 ON (T1.Товар=Товары.Товар)
	JOIN	ВозвратТоваров T2 ON (T2.Товар=Товары.Товар)
GROUP BY Товары.Товар, Товары.НазваниеТовара

P.S. Можно просто Бизик admin@busyman.ru ICQ# 131833549


не подойдет - надо
Название Купили Вернули
===========
First 3 0
Second 0 13
а получим
Название Купили Вернули
===========
First 3 0
Second 0 13
Third 0 0
7 июн 05, 11:55    [1602239]     Ответить | Цитировать Сообщить модератору
 Re: Как объединить в запросе таблицы реализации и возвратов  [new]
SanyL
Member

Откуда: Москва
Сообщений: 4540
Ну добавьте тогда условие
WHERE (SUM(ISNULL(T1.Продано,0)) <> 0) OR (SUM(ISNULL(T1.Возвращено,0))<>0)
HAVING (SUM(ISNULL(T1.Продано,0)) <> 0) OR (SUM(ISNULL(T1.Возвращено,0))<>0)

и получите
SELECT 	Товары.Товар, Товары.НазваниеТовара
	, 	SUM(ISNULL(T1.Продано,0)) 	as Продано
	, 	SUM(ISNULL(T1.Возвращено,0)) 	as Возвращено
FROM Товары 
	JOIN	ПродажаТоваров T1 ON (T1.Товар=Товары.Товар)
	JOIN	ВозвратТоваров T2 ON (T2.Товар=Товары.Товар)
GROUP BY Товары.Товар, Товары.НазваниеТовара
WHERE (SUM(ISNULL(T1.Продано,0)) <> 0) OR (SUM(ISNULL(T1.Возвращено,0))<>0)
HAVING (SUM(ISNULL(T1.Продано,0)) <> 0) OR (SUM(ISNULL(T1.Возвращено,0))<>0)
7 июн 05, 12:01    [1602256]     Ответить | Цитировать Сообщить модератору
 Re: Как объединить в запросе таблицы реализации и возвратов  [new]
itON
Member

Откуда: Москва
Сообщений: 391
declare @t1 table ([товар] int, [Продано] int)
declare @t2 table ([товар] int, [Вернули] int)
declare @t3 table ([товар] int, [Название] nvarchar(100))
insert @t1 select 1,3
insert @t2 select 2,13
insert @t3 select 1,'First' union all 
select 2,'Second' union all
select 3,'Third'

select a.[товар],MIN(a.[Название]) Название,ISNULL(SUM(c.[Продано]),0) Продано,
ISNULL(SUM(b.[Вернули]),0) Вернули from @t3 a
left join @t2 b
on a.[товар]=b.[товар]
left join @t1 c
on a.[товар]=c.[товар]
group by a.[товар]
7 июн 05, 12:12    [1602299]     Ответить | Цитировать Сообщить модератору
 Re: Как объединить в запросе таблицы реализации и возвратов  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
SanyL
Ну добавьте тогда условие
WHERE (SUM(ISNULL(T1.Продано,0)) <> 0) OR (SUM(ISNULL(T1.Возвращено,0))<>0)
HAVING (SUM(ISNULL(T1.Продано,0)) <> 0) OR (SUM(ISNULL(T1.Возвращено,0))<>0)

и получите
SELECT 	Товары.Товар, Товары.НазваниеТовара
	, 	SUM(ISNULL(T1.Продано,0)) 	as Продано
	, 	SUM(ISNULL(T1.Возвращено,0)) 	as Возвращено
FROM Товары 
	JOIN	ПродажаТоваров T1 ON (T1.Товар=Товары.Товар)
	JOIN	ВозвратТоваров T2 ON (T2.Товар=Товары.Товар)
GROUP BY Товары.Товар, Товары.НазваниеТовара
WHERE (SUM(ISNULL(T1.Продано,0)) <> 0) OR (SUM(ISNULL(T1.Возвращено,0))<>0)
HAVING (SUM(ISNULL(T1.Продано,0)) <> 0) OR (SUM(ISNULL(T1.Возвращено,0))<>0)
Что-то странная какая-то конструкция, особенно с клаузой WHERE (местоположение в запросе, содержание).
7 июн 05, 12:17    [1602326]     Ответить | Цитировать Сообщить модератору
 Re: Как объединить в запросе таблицы реализации и возвратов  [new]
itON
Member

Откуда: Москва
Сообщений: 391
tpg
Что-то странная какая-то конструкция, особенно с клаузой WHERE (местоположение в запросе, содержание).

Зато выглядит представительно :-)
7 июн 05, 12:20    [1602344]     Ответить | Цитировать Сообщить модератору
 Re: Как объединить в запросе таблицы реализации и возвратов  [new]
Glory
Member

Откуда:
Сообщений: 104760
С двумя join-ми вариант неправильный

declare @t1 table ([товар] int, [Продано] int)
declare @t2 table ([товар] int, [Вернули] int)
declare @t3 table ([товар] int, [Название] nvarchar(100))
insert @t1 select 2,3
insert @t2 select 2,13
insert @t2 select 2,15
insert @t3 select 1,'First' union all 
select 2,'Second' union all
select 3,'Third'

select a.[товар],MIN(a.[Название]) Название,ISNULL(SUM(c.[Продано]),0) Продано,
ISNULL(SUM(b.[Вернули]),0) Вернули from @t3 a
left join @t2 b
on a.[товар]=b.[товар]
left join @t1 c
on a.[товар]=c.[товар]
group by a.[товар]
7 июн 05, 12:44    [1602474]     Ответить | Цитировать Сообщить модератору
 Re: Как объединить в запросе таблицы реализации и возвратов  [new]
itON
Member

Откуда: Москва
Сообщений: 391
Glory
С двумя join-ми вариант неправильный

А сколько их должно быть?
7 июн 05, 12:48    [1602496]     Ответить | Цитировать Сообщить модератору
 Re: Как объединить в запросе таблицы реализации и возвратов  [new]
Glory
Member

Откуда:
Сообщений: 104760
itON
Glory
С двумя join-ми вариант неправильный

А сколько их должно быть?

Один :). Но с подзапросом с UNION ALL
7 июн 05, 12:51    [1602507]     Ответить | Цитировать Сообщить модератору
 Re: Как объединить в запросе таблицы реализации и возвратов  [new]
itON
Member

Откуда: Москва
Сообщений: 391
Glory
Один :). Но с подзапросом с UNION ALL

Вот через коррелированный вроде можно еще...
declare @t1 table ([товар] int, [Продано] int)
declare @t2 table ([товар] int, [Вернули] int)
declare @t3 table ([товар] int, [Название] nvarchar(100))
insert @t1 select 1,3 union all select 2,39 union all select 1,77
insert @t2 select 2,13 union all select 1,23 union all select 2,7
insert @t3 select 1,'First' union all 
select 2,'Second' union all
select 3,'Third'

select a.[товар],min(a.[Название]) Название,isnull(sum(c.[Продано]),0) Продано,
       (select isnull(sum([Вернули]),0) from @t2 d where d.[товар]=a.[товар]) Вернули
 from  @t3 a left join @t1 c
on a.[товар]=c.[товар]
group by a.[товар]
7 июн 05, 13:27    [1602685]     Ответить | Цитировать Сообщить модератору
 Re: Как объединить в запросе таблицы реализации и возвратов  [new]
Доктор Омельченко
Member [заблокирован]

Откуда: Стольный град село Партизанское
Сообщений: 166
Есть еще вопрос по этой базе
добавит т4 - справочник цен, кот могут менятся во времени

declare @t1 table ([товар] int, [Продано] int, [Дата] datetime)
declare @t2 table ([товар] int, [Вернули] int, [Дата] datetime)
declare @t3 table ([товар] int, [Название] nvarchar(100))
declare @t4 table ([товар] int, [Дата] datetime, [Цена] numeric(9, 3))

insert @t1 select 1,3,5 union all select 2,39,17 union all select 1,77,13
insert @t2 select 2,13,17 union all select 1,23,32 union all select 2,7,10
insert @t3 select 1,'First' union all select 2,'Second' union all select 3,'Third'
insert @t4 select 1,4,5 union all select 1,8,7 union all select 2,4,10
--т е продукт 1 с 4 до 8 имел цену 5, а после восьми имел цену 7

Название КупилиКолво ВернулиКолво КупилиСуииа ВернулиСумма
===========

PS т2 и т3 - очень большие

Dr O
8 июн 05, 12:34    [1605847]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить