Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите с запросом / 2 сообщений из 2, страница 1 из 1
08.04.2019, 01:39
    #39797912
ilshatkin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
Мне нужно реализовать непростую логику в ms sql .

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


Как это вообще сделать возможно, хоть путь подскажите.

Сейчас такая ХП вытаскивает все прямые расходы и доходы по статьям помесячно


Код: 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.
65.
66.
67.
68.
69.
70.
71.
72.
ALTER  PROCEDURE [dbo].[getFinPLmonthDirectProekt]		 
		@proekt nvarchar(50) 
AS
begin

	SET NOCOUNT ON;
	 
	  
 ;WITH mm(a) AS
 (
	SELECT number FROM master..spt_values WHERE type = 'p'
 ), grp AS 
 (
	SELECT 	
		OriginFrom = [project].dataS,
		OriginInto =[project]. dataPo,
		[dataS] = 
				CASE 
					WHEN b.a = 0 
					THEN [project].dataS 
					ELSE CAST(DATEADD(month, DATEDIFF(month, 0, DATEADD(month,b.a,[project].dataS)), 0) as date)
				END,
		[dataPo] = 
				CASE 
					WHEN EOMONTH(DATEADD(month,b.a,[project].dataS)) > [project].dataPo
					THEN [project].dataPo
					ELSE EOMONTH(DATEADD(month,b.a,[project].dataS))
				END,
		exp	,
		[nds],
		A.[tip], 
		[vid],
		[finBookProject].nomDoc,	
		[finBookProject].summa,
		[analitiki].name as expName,
		[analitiki].tipPL,
		[analitiki].tipText 

	FROM [finBook] AS A
	Left   JOIN 
	[finBookProject] ON   A.operation = [finBookProject].operation and  A.nomDoc =  [finBookProject].nomDoc INNER JOIN 
	[project] ON [finBookProject].projectKod = [project].kod and [project].actualnost=1  
	INNER JOIN
		mm	AS b
	ON	b.a	<= DATEDIFF(month,0,[project].dataPo) - DATEDIFF(month,0,[project].datas)
	INNER JOIN
	[analitiki] ON exp=[analitiki] .[kod] 
	 
	WHERE  A.actualnost=1  and A.tip<2 and [project].kod=@proekt
)

SELECT 
	
	CONVERT(INT, CONVERT(DATETIME,DATEADD(month, DATEDIFF(month, 0, dataS), 0))) as PLmonth,
	months.nameMonth,	 
	exp,	
	[tip],
	[vid],
	expName,
	tipPL,
	tipText, 
	SUM (CAST(ROUND(1.* summa/(100+nds)*100 * (1 + DATEDIFF(day,dataS,DataPo)) /(1 + DATEDIFF(day,OriginFrom,OriginInto)),2) as money)) as value
	--,nomDoc,OriginFrom,	OriginInto,	summaZakrit/(100+nds)*100 

FROM grp INNER JOIN 
	months ON months.firtstDay=DATEADD(month, DATEDIFF(month, 0, dataS), 0)

 

GROUP BY  expName, CONVERT(INT, CONVERT(DATETIME,DATEADD(month, DATEDIFF(month, 0, dataS), 0))), nameMonth,exp,tip,[vid], tipPL, tipText, DATEADD(month, DATEDIFF(month, 0, dataS), 0)
--,nomDoc,OriginFrom,OriginInto,	summaZakrit/(100+nds)*100
 order by PLmonth	
...
Рейтинг: 0 / 0
08.04.2019, 10:29
    #39797967
StarikNavy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
ilshatkin,

разбейте задачу на маленькие, и так и делайте
1) вычислить долю (например в отедльную таблицу)
2) воздействовать этой долей
3) формирование отчета
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите с запросом / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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