2014-10-20 64 views
0

我有多個SQL查詢,每個生成一個聚合列輸出,即一個SQL查詢返回列的最大值,另一個返回列中所有值的總和,等等。我想將所有這些值顯示爲表中的單個記錄。例如。報告表,其中每列是由一個單獨的獨立查詢派生

Total_Employees Total_Employees_In_US Bonus_OF_Employees_Under_25 

這只是一個例子。所有列都是相互獨立的,但需要以這種方式顯示。我試圖谷歌我的問題,但我無法正確地說出來得到任何線索。我相信這個問題肯定已經得到解答,但我無法實現。有沒有解決這個問題的鏈接?任何指向正確路徑的指針都很有幫助。如果已經回答了,我會刪除這個問題。

回答

1

可以使用單獨的查詢,如果你想:

select 
    (select count(*) from employees) Total_Employees, 
    (select count(*) from employees where country = 'USA') Total_Employees_In_US, 
    (select sum(bonus) from employees where age < 25) Bonus_OF_Employees_Under_25 
from dual 

或者在這個例子中,只是一個比較簡單的查詢:

select 
    count(*) Total_Employees, 
    sum(case when country = 'USA' then 1 end) Total_Employees_In_US, 
    sum(case when age < 25 then bonus end) Bonus_OF_Employees_Under_25 
from employees 

爲了生產組:

select 
    EmployeeCategory, 
    count(*) Total_Employees, 
    sum(case when country = 'USA' then 1 end) Total_Employees_In_US, 
    sum(case when age < 25 then bonus end) Bonus_OF_Employees_Under_25 
from employees 
group by EmployeeCategory 
+0

我有一個名爲EmployeeCategory的額外列,所有其他列需要在這個上是'Group By'。是否可以調整解決方案來解決這個問題? – Xion 2014-10-21 21:26:59

+1

@Xion是的,你可以做到這一點 - 這是一個簡單的小組,但它只能用第二個版本的查詢。請參閱附錄以回答。 – Bohemian 2014-10-21 22:00:01

1

您的個人查詢可以在CTE中,您可以進行最終加入。 這只是一個例子,在這種情況下,單個GROUP BY應該已經工作了,因爲我不知道你的查詢,你可以做類似的事情。

; with cte as 
(
select COUNT(*) as Total_Employees, Record# from TableA 
GROUP BY Record# 
), 
cte1 as 
(
select COUNT(*) as Total_Employees_In_US, Record# from TableA 
where -- some condition 
group by Record# 
) 
select cte.Record#, cte.Total_Employees, cte1.Total_Employees_In_US 
from cte 
join cte1 
on cte1.Record#= cte.Record# 
+0

我可以用Record#做到這一點。沒有記錄#可以嗎?我正在編輯我的問題以刪除該列,因爲所有記錄都是相互獨立的。 – Xion 2014-10-20 20:36:56

+1

是的,它;與CTE爲 ( SELECT COUNT(*),如從表A Total_Employees) CTE1從CTE ( SELECT COUNT(*)作爲Total_Employees_In_US從表A ) 選擇cte.Total_Employees,cte1.Total_Employees_In_US , cte1 – radar 2014-10-20 20:41:52

相關問題