乙個關於累加工資的T SQL語句

2021-09-22 10:50:31 字數 2360 閱讀 6177

今天在itpub看到乙個人問的語句問題:

問題如下:

table:emp 

parent_id emp_id emp_name total_amout 

null 2 andrew 200 

2 1 nancy 100 

2 3 janet 120 

3 4 michael 80 

1 5 robert 50 

每個員工的總銷售額=自己的銷售額+其下級員工的總銷售額, 

比如: 

andrew = 200_100_120_80_50=550 

nancy = 100+50=150 

janet = 120+80=200 

michael = 80 

robert = 50 

這個用sql怎樣可以查詢得到,請教一下大家???

我用遞迴+游標實現了一下,總感覺應該有更好的實現方式,下面是我的實現方式:

with recur(parent_id , emp_id , emp_name , total_amout,tlevel) as

(select parent_id , emp_id , emp_name , total_amout,0 as tlevel

from emp as b

where parent_id is null

union all

select a.parent_id , a.emp_id , a.emp_name , a.total_amout,b.tlevel+1

from emp as a inner join recur b on a.parent_id=b.emp_id )

select * into emp_ext

from recur

declare @level int

declare @temp int

select @level=max(tlevel) from emp_ext

while(@level>0)

begin

declare cursor_t cursor local static read_only forward_only

for 

select emp_id from emp_ext where tlevel=@level-1

open cursor_t

fetch next from cursor_t into @temp

while @@fetch_status=0

begin

print @level

update emp_ext set total_amout=(select sum(total_amout) from emp_ext where parent_id=@temp)+(select total_amout from emp_ext where emp_id=@temp)

where emp_id=@temp

fetch next from cursor_t into @temp

endset @level=@level-1

close cursor_t

deallocate cursor_t

end為了便於大家測試,我把生成表和資料的**也複製如下:

create table emp(

parent_id  int,

emp_id  int,

emp_name  varchar(50),

total_amout int )

insert into emp(parent_id , emp_id , emp_name , total_amout)

values (null   ,    2     ,  'andrew'    , 200)

insert into emp(parent_id , emp_id , emp_name , total_amout)

values (2     ,       1   ,    'nancy',     100)

insert into emp(parent_id , emp_id , emp_name , total_amout)

values (2     ,       3    ,   'janet'  ,   120)

insert into emp(parent_id , emp_id , emp_name , total_amout)

values (3     ,       4  ,     'michael'  ,   80)

insert into emp(parent_id , emp_id , emp_name , total_amout)

values (1       ,     5    ,   'robert'   ,  50)

在乙個TSQL語句中多次使用Count聚合函式

做報表的時候經常會用到聚合函式,有時候可能需要在乙個查詢裡面寫多個count,只是count的條件不一樣。這種要怎麼寫呢?我們可以用子查詢來做這樣的事 select count 1 select count from table1 where reference 1 count 2 select c...

乙個sql server update的語句

1 q 從一台伺服器表中某欄位拷貝到另乙個伺服器表中 1.1 鏈結伺服器建立 1.2 建立表insert部分表資料 1.3 其他資料需要從另乙個表中拷貝一欄過來,經常出錯 後經驗證是表名字首太長導致,用臨時表解決 drop table tmp 刪除臨時表 tmp create table tmp 建...

一道關於T SQL語句的資料庫題目

請教我寫出有關如下要求的t sql語句 超市應用系統資料庫 一 設計目的 設計乙個超市收銀系統的部分資料庫結構。二 設計要求 系統中要求有對商品 會員 銷售情況的統計。三 概要說明 1 對商品資訊包括 名稱 成本價 銷售價 產地計量單位 商。2 對會員資訊包括 姓名 性別 年齡 家庭住址 聯絡 對於...