Please start any new threads on our new site at https://forums.sqlteam.com. We've got lots of great SQL Server experts to answer whatever question you can come up with.

 All Forums
 SQL Server 2005 Forums
 Transact-SQL (2005)
 QUERY

Author  Topic 

WoodHouse
Posting Yak Master

211 Posts

Posted - 2009-08-03 : 06:05:40
Hi



CREATE TABLE #temp(D_A INT, O_B INT , C_C INT, F_D BIT, Value INT ,SUM_D INT)

INSERT INTO #temp(D_A ,O_B , C_C , F_D)
SELECT 5, 75 ,5 , 0 UNION ALL
SELECT 6, 75 ,92 , 0 UNION ALL
SELECT 7, 75 ,7 , 0 UNION ALL
SELECT 3, 75 ,112, 1 UNION ALL

SELECT 6, 75 ,6 , 0 UNION ALL
SELECT 3, 75 ,156, 0 UNION ALL
SELECT 4, 75 ,4 , 1 UNION ALL

SELECT 6, 75 ,376, 0 UNION ALL
SELECT 3, 75 ,3 , 0 UNION ALL
SELECT 5, 75 ,392, 0 UNION ALL
SELECT 6, 75 ,6 , 0 UNION ALL
SELECT 3, 75 ,300, 1

SELECT * FROM #temp

DROP TABLE #temp

How to split the table data to groups. group Delimiter is 1 in F_D column

? The Value formula is ABS(O_B - C_C) for all rows in all groups.

? Find MIN valus formula is MIN(VALUE) in each group.

? After find the minimum value for each group.

? Take the minimum value row in Value column and sum of current row D_A value + previous D_A rows values.these value should be in min value row calci..


The groups and calculation are should be...like this.............

D_A O_B C_C F_D Value SUM_D
5 75 5 0 70
6 75 100 0 25 SUM(D_A)=11 11
7 75 8 0 67
3 75 25 1 50
MIN(VALUE)=25


6 75 6 0 69 SUM(D_A)=6 6
3 75 156 0 81
4 75 4 1 71
MIN(VALUE)=69


6 75 376 0 301
3 75 3 0 72
5 75 392 0 317
6 75 6 0 69 SUM(D_A)=20 20
3 75 300 1 225
MIN(VALUE)=69

Please help on this thanks in advance........

WoodHouse
Posting Yak Master

211 Posts

Posted - 2009-08-03 : 07:39:00
Hi

I have done like this....


DECLARE @CUR INT
DECLARE @MIN INT
DECLARE @NEXT INT

SET @CUR =1


SELECT @NEXT = MIN(ROW_ID)
FROM #TEMP WHERE F_D = 1


SELECT @NEXT,@CUR

WHILE @CUR < @NEXT
BEGIN

CREATE TABLE #temp1(ROW_ID INT , Value INT ,D_A INT ,SUM_D INT)

INSERT INTO #temp1(ROW_ID , Value,D_A )
SELECT ROW_ID , Value,D_A FROM #TEMP WHERE ROW_ID BETWEEN @CUR AND @NEXT

SET @NEXT = @NEXT+1

SET @CUR = @NEXT

SELECT @NEXT = MIN(ROW_ID)
FROM #TEMP WHERE F_D = 1 AND ROW_ID > @CUR

SELECT @MIN = ROW_ID FROM #TEMP1 WHERE VALUE =(SELECT MIN(VALUE) FROM #TEMP1 )

UPDATE t
SET t.SUM_D = s.val
FROM #TEMP1 t
INNER JOIN
( SELECT t.ROW_ID,
SUM(c.D_A) AS val
FROM #TEMP1 t
INNER JOIN #TEMP1 c
ON c.ROW_ID <= t.ROW_ID
WHERE t.ROW_ID = @MIN
GROUP BY t.ROW_ID
) s
ON s.ROW_ID = t. ROW_ID ;

SELECT * FROM #TEMP1

DROP TABLE #temp1

END
Go to Top of Page

khtan
In (Som, Ni, Yak)

17689 Posts

Posted - 2009-08-03 : 08:31:41
1. can you also include the ROW_ID in your original sample data ?

2. in your expected result, row 2, D_A = 6, you have C_C = 100. Can you explain where is this 100 comes from ?


KH
[spoiler]Time is always against us[/spoiler]

Go to Top of Page
   

- Advertisement -