想要查询此方案的SQL查询

时间:2016-04-09 16:38:58

标签: sql sql-server

tbl_employee

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

此处1表示信用,2表示借记

我想输出

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 个答案:

答案 0 :(得分:0)

你可以这样做:

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

最里面的选择是从3个表中收集数据,下一个是计算金额+/-,最外面的是计算余额。

SQL Fiddle

中的示例