2015-09-23 73 views
-1

這些都是表:dbo.applicationdbo.actiondbo.ogpo_deptdbo.employees選擇加入

| ID | dept_id | action | premium | | ID | Name  |  
------------------------------------ -----------------  
| 1 | 5  | 21  | 61446 | | 21 | Stiker |  
| 2 | 11  | 18  | 325  | | 18 | One Super| 
| 3 | 5  | null | 224  | 
| 4 | 11  | 18  | 262  | 

| ID | Name    |   | ID | FullName | dept_id | 
---------------------------   --------------------------- 
| 5 | Sales Dep   |   | 1 | Mike  | 5  | 
| 11 | HR Dep    |   | 2 | Ronaldo | 11  | 

我的查詢:

select od.name as dept_name, 
     e.Fullname, 
     oac.name, 
     COUNT(oa.id) as total, 
     SUM(oa.premium) as premSum 
from dbo.ogpo_dept od 
    inner join dbo.employees e on e.dept_id = od.id 
    left join dbo.application oa on oa.dept_id = od.id 
    left join dbo.action oac on oac.id = oa.[action] 
group by dept_name, e.Fullname, oac.name, oa.[action] 

查詢執行很長一段時間(沒有按完成)。

我試過了,如果要刪除SUM (premium) as premSum那就執行了。

我想收到這樣的結果:

| Dept_name | FullName | Name  | total | premium | 
----------------------------------------------------- 
| Sales Dep | Mike  |One Super |68  | 40210 | 
| HR Dep | Ronaldo |NULL  | 0  | Null | 
+0

如果它沒有完成您可能會被詢問對鎖定的表,如果它只是很慢檢查執行計劃或競爭查詢。 –

+0

@Hart CO,最後不要輸出結果 – Zhandos

+1

我試着創建一個sqlfiddle,但是你的模式並沒有和你的樣本一樣的結構。你能幫我們解決嗎? http://sqlfiddle.com/#!6/9bc32/2 –

回答

-2
SELECT od.NAME AS dept_name 
    ,e.Fullname 
    ,oac.NAME 
    ,COUNT(oa.id) AS total 
    ,SUM(oa.premium) AS premSum 
FROM dbo.ogpo_dept WITH (NOLOCK) od 
INNER JOIN dbo.employees WITH (NOLOCK) e ON e.dept_id = od.id 
LEFT JOIN dbo.application WITH (NOLOCK) oa ON oa.dept_id = od.id 
LEFT JOIN dbo.action WITH (NOLOCK) oac ON oac.id = oa.[action] 
GROUP BY dept_name 
    ,e.Fullname 
    ,oac.NAME 
    ,oa.[action] 
+0

你必須提供一些更多的信息,爲什麼添加'(NOLOCK)'可能工作。另請注意,正確的表示法是帶有(NOLOCK)'的dbo.employees。退出'with'已被棄用。 –

+0

@GeertBellekens與你同意。 –