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

Откуда:
Сообщений: 2
Здравствуйте! Помогите, пожалуйста, с запросом!
Есть две таблицы

1. Товары
IDCodeName
31Товар 1
45Товар 5
54Товар 4
63Товар 3
72Товар 2


2. Операции
IDOperTypeOperIDGoodIDQttyDate
352936'01.02.2012'
362953'01.02.2012'
3721065'02.02.2012'
38210413'02.02.2012'
3921159'02.02.2012'
40212314'03.02.2012'
4121267'03.02.2012'
4221349'03.02.2012'
4312516'03.02.2012'

OperType=1 это приход, 2 это расход

Как можно получить такую таблицу, составленную на 3.02.2012?
CodeNameПриходРасходРасход 01.02.2012Расход 02.02.2012
1Товар 101460
2Товар 20000
3Товар 30705
4Товар 416039
5Товар 509013
3 фев 12, 08:54    [12023781]     Ответить | Цитировать Сообщить модератору
 Re: Запрос  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Konstantin Kudin,

LEFT JOIN + ISNULL
3 фев 12, 09:46    [12023955]     Ответить | Цитировать Сообщить модератору
 Re: Запрос  [new]
Konstantin Kudin
Member

Откуда:
Сообщений: 2
Можно подробнее, каким образом? Хотя бы примерно, чтобы мне знать каким путем идти!
Легко получается сделать столбцы Code, Name, но остальные столбцы (Приход Расход Расход 01.02.2012 Расход 02.02.2012) одновременно сформировать не могу.
3 фев 12, 13:35    [12026111]     Ответить | Цитировать Сообщить модератору
 Re: Запрос  [new]
Crimean
Member

Откуда:
Сообщений: 13147
+ PIVOT, кстати
3 фев 12, 13:36    [12026124]     Ответить | Цитировать Сообщить модератору
 Re: Запрос  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
Konstantin Kudin,

declare @t table(ID int,Code int,Name varchar(100));
insert @t values
(3,1,'Товар 1'),
(4,5,'Товар 5'),
(5,4,'Товар 4'),
(6,3,'Товар 3'),
(7,2,'Товар 2');

set dateformat dmy;
declare @o table(ID int,OperType int,OperID int,GoodID int,Qtty int,Date datetime);
insert @o values
(35,2,9,3,6,'01.02.2012'),
(36,2,9,5,3,'01.02.2012'),
(37,2,10,6,5,'02.02.2012'),
(38,2,10,4,13,'02.02.2012'),
(39,2,11,5,9,'02.02.2012'),
(40,2,12,3,14,'03.02.2012'),
(41,2,12,6,7,'03.02.2012'),
(42,2,13,4,9,'03.02.2012'),
(43,1,2,5,16,'03.02.2012');

with o as
(
select 
	GoodID,
	[Приход 03.02.2012] = sum(case when Date = '20120203' and OperType = 1 then Qtty else 0 end),
	[Расход 03.02.2012] = sum(case when Date = '20120203' and OperType = 2 then Qtty else 0 end),	
	[Расход 01.02.2012] = sum(case when Date = '20120201' and OperType = 2 then Qtty else 0 end),
	[Расход 02.02.2012] = sum(case when Date = '20120202' and OperType = 2 then Qtty else 0 end)
from @o
group by
	GoodID
)
select 
	t.Code,
	t.Name,
	[Приход] = isnull([Приход 03.02.2012],0),
	[Расход] = isnull([Расход 03.02.2012],0),
	[Расход 01.02.2012] = isnull([Расход 01.02.2012],0),
	[Расход 02.02.2012] = isnull([Расход 02.02.2012],0)
from
	@t t
	left join o on t.ID = o.GoodID 
order by
	t.Code
3 фев 12, 14:01    [12026385]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить