2009-11-18 4 views
0

У меня есть одна таблица с именем LedgerReport, которые содержат имя клиента, номер счета продаж и количество, и я должен генерировать баланс клиентской мудрого по одной строке без использования курсоровSQL Query для создания баланса

и я хав посылать и образец отчета ниже, так, пожалуйста, пришлите мне некоторые предложения, чтобы решить мою проблему ...

Create Table LedgerReport 
(
    Customer Nvarchar(64), 
    Billno Nvarchar(64), 
    Amount Decimal (10,3) 
) 

Insert Into LedgerReport Values ('Prem','Sb-001','5000') 
Insert Into LedgerReport Values ('Prem','Sb-002','7000') 
Insert Into LedgerReport Values ('Prem','Sb-003','2000') 
Insert Into LedgerReport Values ('Prem','Sb-004','8000') 
Insert Into LedgerReport Values ('Biswo','Sb-005','2000') 
Insert Into LedgerReport Values ('Biswo','Sb-006','3000') 
Insert Into LedgerReport Values ('Biswo','Sb-007','4000') 
Insert Into LedgerReport Values ('Biswo','Sb-008','5000') 

 

Select * from LedgerReport 
------------------------------------------------ 
Customer BillNo  Amount **Balance** 
---------------------------------------------- 
Prem  Sb-001 5000.000 **5000.000** 
Prem  Sb-002 7000.000 **12000.000** 
Prem  Sb-003 2000.000 **14000.000** 
Prem  Sb-004 8000.000 **22000.000** 
Biswo  Sb-005 2000.000 **2000.000** 
Biswo  Sb-006 3000.000 **5000.000** 
Biswo  Sb-007 4000.000 **9000.000** 
Biswo  Sb-008 5000.000 **14000.000** 

ответ

2
SELECT Customer, BillNo, Amount 
    ,(SELECT SUM(Amount) 
       FROM LedgerReport 
       WHERE Customer = L.Customer 
       AND BillNo <= L.BillNo) 
     'Running Total' 
FROM LedgerReport L 
+0

Номер счета не является целым числом или числом, так что, вероятно, «<=» не работал бы. – Richie

+0

Это похоже на сгенерированную последовательность. –

+1

«<=» работает с сопоставлениями строк. –

0

 
SELECT Customer,SUM(Amount) 
FROM LedgerReport 
GROUP BY Customer 

+1

Biswo нуждается в каждой строке с обновленным балансом. – Richie

1

Вы также можете попробовать это, чтобы избежать выбирает в списке столбцов

SELECT l.Customer, 
     l.Billno, 
     l.Amount, 
     SUM(lBal.Amount) RunningTotal 
FROM LedgerReport L LEFT JOIN 
     LedgerReport lBal ON L.Customer = lBal.Customer 
          AND L.Billno >= lBal.Billno 
GROUP BY l.Customer, 
     l.Billno, 
     l.Amount 
Смежные вопросы