今天在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 對會員資訊包括 姓名 性別 年齡 家庭住址 聯絡 對於...