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

Откуда:
Сообщений: 265
Подскажите как мне сделать так что бы если существует сумма с минусом, то идет отбор до первого значения с плюсом и берет из CountDay значение и записывает в CountDay который с минусом

Выводит - http://i.imgur.com/q0SoMsE.png

Получится

10312000 1 2012-11-30 00:00:00.000 -55287,2 -55287,2 7


  DECLARE 
  @Estimate INT,	 
  @Author INT,
  @Status INT 
  
  SET @Estimate = 10312000 /* 19011000 --10312000 -- 21088000*/
  SET @Author = -1
  SET @Status = 0
  
	CREATE TABLE #SumTable
	(
		EstimateID INT,
		Borned DATETIME,
		Price FLOAT	
	)
	
	INSERT INTO #SumTable (EstimateID,Borned,Price)
	SELECT B.EstimateID, B.Borned, CASE WHEN B.MDebit IN (2,10) THEN sum(-B.Price) ELSE SUM(B.Price) END AS Price 
	FROM _Books B
	WHERE (B.MDebit IN (2,10) OR B.MCredit IN (2,10))  AND B.[Status] > 0 AND B.EstimateID = @Estimate
	GROUP BY B.EstimateID, B.Borned, B.MDebit

	INSERT INTO #SumTable (EstimateID,Borned,Price)
	SELECT B2.EstimateID, B2.Borned, sum(B2.Price) AS Price
	FROM _Books B2
	WHERE B2.MCredit = 11 AND B2.Credit = 43  AND B2.[Status] > 0 AND B2.EstimateID = @Estimate
	GROUP BY B2.EstimateID, B2.Borned

	
	SELECT s.EstimateID, s.Borned, sum(s.Price) AS Price 
	INTO #Temp
	FROM #SumTable S
	--WHERE S.Price > 0
	GROUP BY S.EstimateID, S.Borned
	ORDER BY st.Borned
	
	--Вариант первый
		SELECT EstimateID, Borned, Price,
		
		(
		SELECT SUM(T1.Price)
		FROM #Temp T1
		WHERE T1.Borned <= T2.Borned and T1.EstimateID = T2.EstimateID
		) Total,
		
		(
		SELECT TOP 1 DATEDIFF(d,T2.Borned, T1.Borned)
		FROM #Temp T1
		WHERE T1.Borned <= T2.Borned and T1.EstimateID = T2.EstimateID
		) CountDay,
		
		(
		SELECT TOP 1 DATEDIFF(d,T2.Borned, T1.Borned) 
		FROM #Temp T1
		WHERE T1.Borned <= T2.Borned and T1.EstimateID = T2.EstimateID
		) CountDay1
		
		
		INTO #Result
		FROM #Temp T2 
		
				
		
	--Вариант второй
	  declare SumDate cursor FOR
	  SELECT EstimateID, ROW_NUMBER() OVER(ORDER BY EstimateID ASC) AS Number, Borned, Price, Total, CountDay 
	  FROM #Result T
	  
	  open SumDate  
	  fetch from SumDate
	  
	  while @@fetch_status = 0
	  BEGIN	
	  	
	  

		fetch next from SumDate
	  end 
	  
	  close SumDate
	  deallocate SumDate 
	
	DROP TABLE #SumTable, #Temp, #Result
	
27 июн 17, 14:59    [20594070]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить