SQL连接两个不相关或具有主键的表

时间:2012-04-16 11:06:02

标签: sql sql-server

我有以下查询: -

select
dbo.table1.service,
dbo.table1.level_3_structure,
Sum(table1.Reduced) as Total_Reduced

from dbo.table1

where 
dbo.table1.Period = 'Cumulative'

Group by 
dbo.table1.service,
dbo.table1.level_3_structure

结果与此类似: -

service          level_3_structure   Total_Reduced
Service 1            Structure1          11.76
Service 2            Structure2         239.86
Service 3            Structure3         940.29

我有另一个表(表2),其中包含值service和level_3_structure,还包含一个名为'FTE'的列。

我想要做的是,根据service和level_3_structure加入此表并返回FTE的总和。

我已经尝试过以下查询,但它似乎为每个加工行复制了table1,产生了大约830万个结果。

select
dbo.table1.service,
dbo.table1.level_3_structure,
Sum(dbo.table1.Reduced) as Total_Reduced,
Sum(dbo.table2.fte) as 'Total FTE'

from dbo.table1
left join dbo.table2
on dbo.table1.service = dbo.table2.service and
   dbo.table1.level_3_structure = dbo.table2.level_3_structure

where 
dbo.table1.Period = 'Cumulative'

Group by 
dbo.table1.service,
dbo.table1.level_3_structure

1 个答案:

答案 0 :(得分:5)

如果你的第一个查询返回你需要的行,那么你可以将它(而不是table1)加入table2:

select service, level_3_structure, Total_Reduced, sum(fte) as Total_FTE
from (
    select 
    dbo.table1.service, 
    dbo.table1.level_3_structure, 
    Sum(table1.Reduced) as Total_Reduced 

    from dbo.table1 

    where  
    dbo.table1.Period = 'Cumulative' 

    Group by  
    dbo.table1.service, 
    dbo.table1.level_3_structure 
) t1
inner join table2 on t1.service = table2.service 
AND t1.level_3_structure = table2.level_3_structure 

    Group by  
    dbo.table1.service, 
    dbo.table1.level_3_structure 

但是,听起来你的table1应该有列fte。