powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите с запросом
2 сообщений из 2, страница 1 из 1
Помогите с запросом
    #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
Помогите с запросом
    #39797967
Фотография StarikNavy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ilshatkin,

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


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