Click here to Skip to main content
15,885,767 members
Please Sign up or sign in to vote.
5.00/5 (1 vote)
Hi,

Im having a table with 4 columns as below

Sno Opening Plusvalue MinusValue Closing
1 0 5 2 0
2 0 8 4 0
3 0 8 6 0
4 0 9 7 0

Formula for arriving my closing column is

Closing = Opening+Plusvalue-MinusValue

Formula for arriving my opening column is

Opening = Previous column closing

My required output is

Sno Opening Plusvalue MinusValue Closing
1 0 5 2 3
2 3 8 4 7
3 7 8 6 9
4 9 9 7 11

I need a query to acheive this output
Posted

Hi Krithiga,

Check my following Sample TSQL Script.

SQL
-- Table Creation Statement
IF OBJECT_ID('TempDB..#TestSample') IS NOT NULL DROP TABLE #TestSample
CREATE TABLE #TestSample(Sno INT,Opening INT,Plusvalue INT,MinusValue INT,Closing INT)

-- Insert Sample Values
INSERT INTO #TestSample(Sno, Opening, Plusvalue, MinusValue, Closing)
VALUES(1, 0, 5, 2, 0),(2, 0, 8, 4, 0),(3, 0, 8, 6, 0),(4, 0, 9, 7, 0)

-- Given Data
SELECT Sno, Opening, Plusvalue, MinusValue, Closing FROM #TestSample

-- Required Output
SELECT T.Sno, (ISNULL((SELECT SUM((Opening+Plusvalue-MinusValue)) 
	    FROM #TestSample 
	    WHERE Sno < T.Sno),0)) 'Opening', 
T.Plusvalue, T.MinusValue, 
(ISNULL((SELECT SUM((Opening+Plusvalue-MinusValue)) 
	    FROM #TestSample 
	    WHERE Sno < T.Sno),0) + T.Plusvalue - T.MinusValue) 'Closing'
FROM #TestSample T


Regards,
GVPrabu
 
Share this answer
 
Comments
Amir Mahfoozi 13-Feb-13 1:08am    
+5, Well done.
kirthiga S 13-Feb-13 1:57am    
Hi Prabhu,

If I have some internal grouping how to proceed the same.
Hi Prabhu,

If I have some internal grouping how to proceed the same.

For Example

SQL
IF OBJECT_ID('TempDB..#TestSample') IS NOT NULL DROP TABLE #TestSample
CREATE TABLE #TestSample(Sno INT,Group1 INT,Opening INT,Plusvalue INT,MinusValue INT,Closing INT)

INSERT INTO #TestSample(Sno, Group1, Opening, Plusvalue, MinusValue, Closing)
VALUES(1, 1, 0, 5, 2, 0),(1, 2, 0, 8, 4, 0),(1, 3, 0, 8, 6, 0),(2, 1,  0, 9, 7, 0),(2, 2, 0, 7, 2, 0)

select * from #TestSample


My Required output is

Sno Group1 Opening Plusvalue MinusValue Closing
1 1 0 5 2 3
1 2 3 8 4 7
1 3 7 8 6 9
2 1 0 9 7 2
2 2 2 7 2 7

(ie) For Sno 1 seperate group and for Sno 2 seperate group.

Please tell me the solution.
 
Share this answer
 
v2
Comments
Amir Mahfoozi 13-Feb-13 3:00am    
ROW_NUMBER() function will help you achieve this new column. Do a research on it and try it till getting the result.
Hi Kirthiga,

Try This

SQL
-- Required Output
SELECT T.Sno, Group1, (ISNULL((SELECT SUM((Opening+Plusvalue-MinusValue))
        FROM #TestSample
        WHERE Group1 < T.Group1 AND Sno=T.SNo),0)) 'Opening',
T.Plusvalue, T.MinusValue,
(ISNULL((SELECT SUM((Opening+Plusvalue-MinusValue))
        FROM #TestSample
        WHERE Group1 < T.Group1 AND Sno=T.SNo),0) + T.Plusvalue - T.MinusValue) 'Closing'
FROM #TestSample T



Have a nice day..... :-)


Regards,
Venkatesh.
 
Share this answer
 
Comments
marackarasm 4-Sep-21 11:28am    
HOW TO GROUP CUST_CODE

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900