2014-10-20 62 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

相关问题