报告表,其中每列由单独的独立查询派生

时间:2014-10-20 20:10:26

标签: sql sql-server database select sql-server-2012

我有多个SQL查询,每个查询生成一个聚合列输出,即一个sql查询返回一列的最大值,另一个返回列中所有值的总和,依此类推。我想将所有这些值显示为表中的单个记录。例如。

Total_Employees    Total_Employees_In_US    Bonus_OF_Employees_Under_25 

这只是一个例子。所有列都相互独立,但需要以这种方式显示。我试图谷歌我的问题,但我无法正确地说出来获得任何线索。我确信这个问题一定得到了解决,但我无法达成。这个问题已经解决了吗?任何指向正确路径的指针都是有帮助的。如果已经回答,我将删除这个问题。

2 个答案:

答案 0 :(得分:2)

您的个人查询可以在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#

答案 1 :(得分:2)

如果您愿意,可以使用单独的查询:

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