Как написать запрос, чтобы сделать отчет по месяцам в sql - PullRequest
0 голосов
/ 04 июля 2019

Я получаю и отправляю данные за весь год. поэтому я хочу построить базу ежемесячных отчетов на этих данных с правилом Fisrt in first out. Это означает, что первое получение будет отправлено первым ...

DECLARE @ReceivingTbl AS TABLE(Id INT,ProId int, RecQty INT,ReceivingDate DateTime)
INSERT INTO @ReceivingTbl
VALUES (1,1001,210,'2019-03-12'),
(2,1001,315,'2019-06-15'),
(3,2001,500,'2019-04-01'),
(4,2001,10,'2019-06-15'),
(5,1001,105,'2019-07-10')

DECLARE @SendTbl AS TABLE(Id INT,ProId int, SentQty INT,SendMonth int)
INSERT INTO @SendTbl
VALUES (1,1001,50,3),
(2,1001,100,4),
(3,1001,80,5),
(4,1001,80,6),
(5,2001,200,6)

SELECT * FROM @ReceivingTbl ORDER BY ProId,ReceivingDate
SELECT * FROM @SendTbl ORDER BY ProId,SendMonth

Id  ProId   RecQty  ReceivingDate
1   1001    210 2019-03-12 
2   1001    315 2019-06-15 
5   1001    105 2019-07-10 
3   2001    500 2019-04-01 
4   2001    10  2019-06-15 

Id  ProId   SentQty SendMonth
1   1001    50  3
2   1001    100 4
3   1001    80  5
4   1001    80  6
5   2001    200 6

--- А вот что я хочу:

Id  ProId   RecQty  ReceivingDate   ... Mar Apr May Jun
1   1001    210 2019-03-12  ... 50  100 60  0
2   1001    315 2019-06-15  ... 0   0   20  80
5   1001    105 2019-07-10  ... 0   0   0   0
3   2001    500 2019-04-01  ... 0   0   0   200
4   2001    10  2019-06-15  ... 0   0   0   0

Спасибо!

1 Ответ

0 голосов
/ 04 июля 2019

Ваш вопрос мне не понятен.Если вы хотите просто использовать подход FIFO, поэтому игнорируйте любые данные, содержащиеся в таблице, вам необходимо упорядочить по идентификатору, который в вашем примере вы предоставляете, и выглядит так, как если бы он был вставлен.

Первая вставленная строка должна быть также первой строкой, появляющейся в списке выбора (FIFO), для этого вы должны использовать:

ORDER BY Id ASC

, который поместит нижнее значение идентификатора первым (1,2, 3, ...)

Для меня это не имеет особого смысла, поэтому обратите внимание на значение данных, которые у вас есть на самом деле, и используйте даты, такие как ReceivingDate, и упорядочите их, возможно,даже фильтрация по месяцам даты, ниже примера для данных за январь:

WHERE MONTH(ReceivingDate) = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...