Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите с запросом / 7 сообщений из 7, страница 1 из 1
22.02.2019, 11:09
    #39777780
ilshatkin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
Помогите, пожалуйста, написать, который
1. выберет из таблицы строки входящие в выбранный период
2. распределит в выбранном периоде суммы по месяцам по количеству дней. Суммы округлять до копеек

Готов отблагодарить материально, можно писать на почту ilshatkin@mail.ru

Исходная таблица
dataS dataPo exp nomDoc summaZakrit
01.01.2018 31.03.2018 ВГ001 584 3 000,00
01.03.2018 30.04.2018 НР002 586 5 000,00
01.02.2018 28.02.2018 ПДР01 587 10 000,00
15.01.2018 15.02.2018 ВГ001 588 2 000,00

На выходе должно получится,
для периода 01.01.2018 – 31.03.2018

data1 data2 exp nomDoc summaZakrit
01.01.2018 31.01.2018 ВГ001 584 1 033,33
01.02.2018 28.02.2018 ВГ001 584 933,33
01.03.2018 31.03.2018 ВГ001 584 1 033,33
01.03.2018 31.03.2018 НР002 586 2 540,98
01.02.2018 28.02.2018 ПДР01 587 10 000,00
01.01.2018 31.01.2018 ВГ001 588 1 062,50
01.02.2018 28.02.2018 ВГ001 588 937,5
...
Рейтинг: 0 / 0
22.02.2019, 11:34
    #39777802
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
ilshatkin,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
DECLARE @T TABLE
(
	dataS		date,
	dataPo		date,
	exp		VARCHAR(10),
	nomDoc		VARCHAR(10),
	summaZakrit	money
)
INSERT INTO @T
(
	dataS		,
	dataPo 		,
	exp 		,
	nomDoc 		,
	summaZakrit 
)
VALUES
('01 jan 2018', '31 mar 2018',  'ВГ001', '584 ', 3000.00 ),
('01 mar 2018', '30 apr 2018',  'НР002', '586 ', 5000.00 ),
('01 feb 2018', '28 feb 2018',  'ПДР01', '587 ', 10000.00),
('15 jan 2018', '15 feb 2018',  'ВГ001', '588 ', 2000.00 )

; WITH mm(a) AS
 (
	SELECT number FROM master..spt_values WHERE type = 'p'
 ), grp AS 
 (
	SELECT 	
		OriginFrom = dataS,
		OriginInto = dataPo,
		[dataS] = 
				CASE 
					WHEN b.a = 0 
					THEN dataS 
					ELSE CAST(DATEADD(month, DATEDIFF(month, 0, DATEADD(month,b.a,dataS)), 0) as date)
				END,
		[dataPo] = 
				CASE 
					WHEN EOMONTH(DATEADD(month,b.a,dataS)) > dataPo
					THEN dataPo
					ELSE EOMONTH(DATEADD(month,b.a,dataS))
				END,
		exp	,
		nomDoc 	,	
		summaZakrit
	
		--
	FROM 
		@T	AS A
	INNER JOIN
		mm	AS b
	ON	b.a	<= MONTH(dataPo) - MONTH(datas) 
	WHERE
		a.dataS	<= '31 mar 2018' 
	AND	a.dataPo	>= '01 jan 2018'
)
SELECT 
	dataS		,
	dataPo 		,
	exp 		,
	nomDoc 		,
	summaZakrit	,
	CAST(ROUND(1.* SUMMAZakrit * (1 + DATEDIFF(day,dataS,DataPo)) /(1 + DATEDIFF(day,OriginFrom,OriginInto)),2) as money)
FROM grp
...
Рейтинг: 0 / 0
22.02.2019, 12:31
    #39777858
ilshatkin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
TaPaK,
выдает результат
2018-01-01 2018-01-31 ВГ001 584 3000.00 1033.332018-02-01 2018-02-28 ВГ001 584 3000.00 933.332018-03-01 2018-03-31 ВГ001 584 3000.00 1033.332018-03-01 2018-03-31 НР002 586 5000.00 2540.982018-04-01 2018-04-30 НР002 586 5000.00 2459.022018-02-01 2018-02-28 ПДР01 587 10000.00 10000.002018-01-15 2018-01-31 ВГ001 588 2000.00 1062.502018-02-01 2018-02-15 ВГ001 588 2000.00 937.50

с требуемым результатом не сходится в последних двух строках, период не начало и не конец, но думаю это легко исправимо, поставив там изменение даты на начало и конец месяца в выдаче последнего селекта,

Так же, если выставить период допустим до конца февраля, то все равно присутствует март.
Но тоже вроде как решается добавив
Код: sql
1.
2.
3.
WHERE
		dataS	<= '28.02.2018' 
	AND	dataPo	>= '01.01.2018'



Еще по тестирую, если в итоге все норм с меня на пиво
...
Рейтинг: 0 / 0
22.02.2019, 12:36
    #39777863
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
ilshatkin,

автор в последних двух строках, период не начало и не коне
для меня это неявное условие

авторТак же, если выставить период допустим до конца февраля, то все равно присутствует март.
Но тоже вроде как решается добавив
добавляйте в итоговый
...
Рейтинг: 0 / 0
22.02.2019, 21:19
    #39778147
ilshatkin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
Покрутил, повертел, то что нужно! Два пива этому господину! эквивалент 1000 рублев

TaPaK, напиши, пожалуйста, куда скинуть на почту ilshatkin@mail.ru
...
Рейтинг: 0 / 0
24.02.2019, 12:11
    #39778405
nullin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
ilshatkin, у Вас от dataS к dataPo нет перехода между годами и соответственно для периода выбора?
...
Рейтинг: 0 / 0
24.02.2019, 16:19
    #39778443
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
nullinilshatkin, у Вас от dataS к dataPo нет перехода между годами и соответственно для периода выбора?
MONTH(dataPo) - MONTH(datas) заменить на DATEDIFF(month,0,dataPo) - DATEDIFF(month,0,datas)
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите с запросом / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]