2013-06-14 3 views
1

У меня есть ситуация.Таблица данных Сумма выпуска

У меня есть DataTable, который содержит кредитные и дебетовые столбцы как этот

Month  Credit  Debit 
Sep  1422825  0 
Oct   0  1422825 
Oct  1695017.5 0 
Nov   0   1400000 
Nov   0   295018 

Я хочу баланс, который должен быть показан как этот

Month  Credit  Debit  Balance 
Sep  1422825  0 
Oct   0  1422825  (1422825 of Credit-1422825 of Debit)=0 
Oct  1695017.5 0 
Nov   0   1400000  
Nov   0   295018  (1695017.5 of credit-1400000+295018)=0.5 

это должно быть показано в отчете кристалла как это сделать Это.

+0

, пожалуйста, помогите мне сделать это. –

+0

Вам нужно показать баланс только в конце месяца. Как и в случае с Нояб. Или вам нужно показать баланс в каждом ряду. –

+0

Это проблема с текущим значением. См. [This] (http://stackoverflow.com/questions/860966/calculate-a-running-total-in-sqlserver). Было бы полезно, если бы вы указали версию SQL-сервера. Например, это для [2005] (http://geekswithblogs.net/Rhames/archive/2008/10/28/calculating-running-totals-in-sql-server-2005---the-optimal.aspx) , – OzrenTkalcecKrznaric

ответ

0

Вот ваше решение, оптимизированное для 2005, я уверен, что он хорошо работает на 2008 (использование целого числа в месяц, это проще ...)

DECLARE @Temp TABLE (Month int, Credit money, Debit money, Balance money) 

DECLARE @RunningTotal money 

SET @RunningTotal = 0 

INSERT INTO @Temp 
SELECT Month, Credit, Debit, null 
FROM Datatable 
ORDER BY Month 

UPDATE @Temp 
SET @RunningTotal = Balance = @RunningTotal + Credit - Debit 
FROM @Temp 

SELECT * FROM @Temp 

EDIT (это продолжается с первого шага) :

Если вам нужно отобразить общее только последнюю запись в группе (месяц), то вы можете использовать функцию ранжирования, как ...

;WITH Temp2 AS 
(
    SELECT 
     *, 
     ROW_NUMBER() OVER (
      PARTITION BY Month 
      ORDER BY Credit DESC, Debit DESC -- whatever order inside group you need 
     ) AS N 
    FROM @Temp 
) 
SELECT 
    Month, 
    Credit, 
    Debit, 
    Balance = CASE WHEN N = 1 THEN Balance ELSE NULL END 
FROM Temp2 

Это не проверено, код написан непосредственно с моей стороны: P

+0

Уважаемый Озрен, Thnx за ваш ответ. это действительно полезно, но дорогая, я не хочу получать текущую сумму, вместо этого я хочу, чтобы баланс каждого месяца. повторите мой вопрос. На самом деле Бог благословит вас. –

+0

Ваш вопрос выглядит так, как будто вам нужны все строки, а не одна строка в месяц. Если вам нужна одна строка в месяц, вы используете общую сумму + группу по месяцам. – OzrenTkalcecKrznaric

+0

Уважаемый Ozren, Могу ли я сделать это с помощью LINQ? –

Смежные вопросы