2016-04-09 11 views
-2

tbl_employeeWollen Sie SQL-Abfrage für dieses Szenario

empid empname openingbal 
2  jhon 400  
3  smith 500 

tbl_transection1

tid empid amount creditdebit date 
1 2  100  1   2016-01-06 00:00:00.000 
2 2  200  1   2016-01-08 00:00:00.000 
3 2  100  2   2016-01-11 00:00:00.000 
4 2  700  1   2016-01-15 00:00:00.000 
5 3  100  1   2016-02-03 00:00:00.000 
6 3  200  2   2016-02-06 00:00:00.000 
7 3  400  1   2016-02-07 00:00:00.000 

tbl_transection2

tid empid amount creditdebit date 
1 2  100  1   2016-01-07 00:00:00.000 
2 2  200  1   2016-01-08 00:00:00.000 
3 2  100  2   2016-01-09 00:00:00.000 
4 2  700  1   2016-01-14 00:00:00.000 
5 3  100  1   2016-02-04 00:00:00.000 
6 3  200  2   2016-02-05 00:00:00.000 
7 3  400  1   2016-02-08 00:00:00.000 

Hier 1 stehen für Kredit- und 2 für Debit

I ausgegeben werden soll, wie

empid empname details   debitamount creditamount balance  Dr/Cr date 
2  jhon  opening Bal         400   Cr  
2  jhon  transection 1     100   500   Cr  2016-01-06 00:00:00.000 
2  jhon  transection 2     100   600   Cr  2016-01-07 00:00:00.000 
2  jhon  transection 1     200   800   Cr  2016-01-08 00:00:00.000 
2  jhon  transection 2     200   1000   Cr  2016-01-08 00:00:00.000 
2  jhon  transection 2  100      900   Dr  2016-01-09 00:00:00.000 
2  jhon  transection 1  100      800   Dr  2016-01-11 00:00:00.000 
2  jhon  transection 2     700   1500   Cr  2016-01-14 00:00:00.000 
2  jhon  transection 1     700   2200   Cr  2016-01-15 00:00:00.000 
3  smith  opening Bal         500   Cr  
3  smith  transection 1     100   600   Cr  2016-02-03 00:00:00.000 
3  smith  transection 2     100   700   Cr  2016-02-04 00:00:00.000 
3  smith  transection 2  200      500   Dr  2016-02-05 00:00:00.000 
3  smith  transection 1  200      300   Dr  2016-02-06 00:00:00.000 
3  smith  transection 1     400   700   Cr  2016-02-07 00:00:00.000 
3  smith  transection 2     400   1100   Cr  2016-02-08 00:00:00.000 
+1

Bitte nehmen Sie sich einen Moment Zeit, die Richtlinien für die Fragen hier im [Hilfe center] fragen (http://stackoverflow.com/help) noch einmal zu lesen. Dies ist kein kostenloser Code-Schreib-Service noch Tutorial-Site. Von Ihnen wird erwartet, dass Sie bereits Grundlagenforschung betrieben haben, um den Code, den Sie ausprobiert haben, mit einer Beschreibung darzustellen, wie es nicht funktioniert und wie das erwartete Ergebnis aussehen würde. – jbm

+0

Nur ein freundlicher Tipp, möchten Sie vielleicht über diese Seite lesen: [Die How-To-Ask-Leitfaden] (https://Stackoverflow.com/help/how-to-ask) so können Sie immer sicher sein, dass Ihre Fragen sind leicht zu beantworten und so klar wie möglich. Stellen Sie sicher, dass Sie alle Anstrengungen unternommen haben, die Sie unternommen haben, um das Problem zu beheben, das Sie haben, und was passiert ist, als Sie diese Korrekturen versuchten. Vergessen Sie auch nicht Ihren Showcode und eventuelle Fehlermeldungen! – rsjaffe

Antwort

0

Sie können wie folgt es mit etwas tun:

select 
    empid, sum(amount) over (partition by empid order by date) as balance, details 
from (
    select 
    empid, case creditdebit when 1 then amount else -amount end as amount, date, details 
    from (
    select empid, openingbal as amount, 1 as creditdebit, '19000101' as date, 'opening Bal' as details 
    from tbl_employee 
    union all 
    select empid, amount, creditdebit, date, 'transection 1' 
    from tbl_transection1 
    union all 
    select empid, amount, creditdebit, date, 'transection 2' 
    from tbl_transection2 
) X 
) Y 

Die innerste wählen Sie die Daten aus den drei Tabellen zu sammeln ist, ist der nächste +/- für die Beträge zu berechnen und die äußerste ist es, das Gleichgewicht zu berechnen.

Beispiel in SQL Fiddle

Verwandte Themen