Q:

Is there any elegant programming operations in multiple columns table?

There is a multiple columns table in MS SQL Server, which schema is like below. 
ID  Person  A    B    C    D    E     ....
1    p      50.  60.  70.  80.  90.   ....
2    p      100. 90.  80.  83.  95.   ....

If I would like to subtract ID1 and ID2 data, the most elegant way I can image is 
SELECT  
    A - LAG(A, 1, 0) OVER (PARTITION BY PERSON ORDER BY ID),
    B - LAG(B, 1, 0) OVER (PARTITION BY PERSON ORDER BY ID),
    C - LAG(C, 1, 0) OVER (PARTITION BY PERSON ORDER BY ID),
    D - LAG(D, 1, 0) OVER (PARTITION BY PERSON ORDER BY ID),
    E - LAG(E, 1, 0) OVER (PARTITION BY PERSON ORDER BY ID)
    ....
FROM Table

Is there a nice solution can be taken for multiple columns table operation? 

A:

One possible approach is to generate and execute a dynamic statement:
DECLARE @table sysname = 'table'
DECLARE @schema sysname = 'dbo'

DECLARE @stm nvarchar(max) = N''
SELECT @stm = CONCAT(
   @stm, 
   N', ', 
   col.[name], 
   ' - LAG(', col.[name], ', 1, 0) OVER (PARTITION BY PERSON ORDER BY ID)'
)
FROM sys.columns col
JOIN sys.tables tab ON col.object_id = tab.object_id
JOIN sys.schemas sch ON tab.schema_id = sch.schema_id
WHERE 
   (tab.[name] = @table) AND 
   (sch.[name] = @schema) AND
   (col.[name] NOT IN ('ID', 'Person'))
SELECT @stm = CONCAT(
   N'SELECT ', 
   STUFF(@stm, 1, 2, N''), 
   N' FROM ', 
   QUOTENAME(@schema), 
   N'.', 
   QUOTENAME(@table)
)

PRINT @stm
EXEC sp_executesql @stm

