我仍然在我使用Grails的學習曲線,我已經碰到了下面的問題:如何引用多個列的1:N關係鏈
class Departement {
String name // "hr", "it"...
static hasMany = [bureaus:Office]
}
class Office {
String bureaunumber // 102, 104, 106...
static hasMany = [ppl:Personnel]
}
class Personnel {
String name // "Smith", "Walker"...
String title // "project manager", "ceo", "financial manager"...
Integer salary
}
的目標是找到薪水的總和爲特定部門的所有管理人員。結果必須提供工資總額的,管理者的總數和部門像這樣的名字:
|dept |total manager|wages |
|--------|-------------|--------|
| hr | 4 | 340000 |
| it | 7 | 610400 |
| ... | ... | ... |
| all | 11 | 950400 |
等
我想創建一個休眠的標準API一個結果,但我堅持使用可以提供上述結果的SQL查詢。目前,它給了我適當的工資總和:
select sum(salary) wages
from personnel
where title LIKE '%manager%'
and office_id in
(
select office.id
from office
where office.dept_id in
(
select dept.id
from dept
where name = 'hr'
)
)
以及 - 不幸的是,這一切都是沙箱。有沒有人知道如何計算每個部門的總經理人數以及如何將部門名稱添加到結果集中?
任何輸入將不勝感激!
=========================
嗨,大家好, 感謝您抽出寶貴的時間回答我的問題!
我對Ben的建議解決方案(管理員)部分感到有點困惑,我在人員領域類中沒有管理員字段......我錯過了那裏的東西嗎?
試着用count(*)和count(personnel.name),但它給了我所有員工的每個部門的工資總額,同時也增加了人員總數 - 而不僅僅是那些具有 「經理人」 稱號: -/
所以運行查詢後的結果是這樣的:
|dept |total manager|wages |
|--------|-------------|---------|
| hr | 139 | 3988800 |
| it | 139 | 3988800 |
| ... | 139 | 3988800 |
| all | 139 | 3988800 |
========更新2:SQL Server的2005+語法到Oracle = ==========
SELECT
CASE GROUPING(d.name)
WHEN 1 THEN 'All:'
ELSE d.name
END dept,
COUNT(*) total_manager,
SUM(p.salary) wages
FROM departement d
INNER JOIN office o ON d.id = o.dept_id
INNER JOIN personnel p ON o.id = p.office_id
WHERE p.name LIKE '%manager%'
GROUP BY ROLLUP(d.name)
就是這樣。我只需要它根據Oracle更改語法,它就像一個魅力一樣工作 - 非常感謝您的幫助! – sphere 2011-04-20 09:40:03