-4
select * from employee

UNIT_ID  PARENT_UNIT   TOT_EMP
-------  -----------   -------
Oracle      IT           10
SAP         IT           20
IT          PST          30
HRGA        FA            5
FA          PST          12 

出力を次のように取得する方法:

IT     60
ORACLE 10
SAP    20
HRGA    5
FA     17
4

3 に答える 3

4
select a.name, sum(a.tot_emp)
from
(
  select unit_id as name, sum(tot_emp) as tot_emp
  from employee
  group by unit_id
  UNION
  select parent_id as name, sum(tot_emp) as tot_emp
  from employee
  group by parent_id
) as a
where exists (select null
              from employee e
              where e.unit_id = a.name)
group by name;

しかし、これは実際の再帰クエリではありません (必要なようです)。サンプルでは機能しますが、実際のデータでは機能しない可能性があります (ただし、階層の深さはわかりません)。

于 2013-01-17T12:04:09.537 に答える
0

これは Oracle クエリです。

SELECT unit_id, SUM(total_emp) FROM stack_test
 GROUP BY unit_id
/
UNIT_ID    SUM(TOTAL_EMP)
--------   --------------
    SAP       50
    HRGA      15
    ORACLE    30

テーブルを作成し、投稿に値を入力することは常に良い考えです...

于 2013-01-17T13:26:24.527 に答える
0

私はいくつかの詳細を知りません。列UNIT_IDに同じ名前を付けることはできますか? そうでない場合、これは良いクエリです:

select e1.UNIT_ID, SUM(TOT_EMP) AS TOT_EMP
from emploee e1
innner join emploee e2
on e1.UNIT_ID = E2.PARENT_UNIT 
group by e1.UNIT_ID

列 UNIT_ID に同じ名前を指定できる場合は、Raphaël Althaus の回答を参照してください。良い答えです。

于 2013-01-17T12:14:28.310 に答える