2017-07-06 47 views
0

我想使用联合将计划和实际数据合并到1个视图中。 为此,我使用两个内部联接来使行匹配 - 然后我使用union语句。目前,我通过3个步骤完成此操作 - 现在我想将所有这些合并为1步。如何在联合声明中包含2个联接

创建vPlan2

Select 
    a.step, 
    a.[planned user], 
    b.[actual user], 
    a.[invoice plan] as 'invoice' 
from vPlan a 
inner join vActuals b on a.step = b.step 
group by 
    a.step, 
    a.[planned user], 
    b.[actual user], 
    a.[invoice plan] 

创建vActuals2

Select 
    a.step, 
    b.[planned user], 
    a.[actual user], 
    a.[invoice actuals] as 'invoice' 
from vActuals a 
inner join vPlan b on a.step = b.step 
group by 
    a.step, 
    a.[actual user], 
    b.[planned user], 
    a.[invoice actuals] 

创建vplanandactuals

select 
    'Plan' as type, 
    a.step, 
    a.[planned user], 
    a.invoice, 
    a.[actual user] 
from vPlan2 a 
group by 
    a.step, 
    a.[planned user], 
    a.invoice, 
    a.[actual user] 
Union 
select 
    'Actuals', 
    b.step, 
    b.[planned user], 
    b.invoice, 
    b.[actual user] 
from vActuals2 b 
group by 
    b.step, 
    b.[planned user], 
    b.invoice, 
    b.[actual user] 
+1

怎么了所有的分组?没有聚合。你有什么错误或问题? – scsimon

+0

你的问题是什么?为什么左连接标签?你的工会为什么不足? – philipxy

回答

1

我想你在找什么是:

Select 
    'Plan' as Type, 
    a.step, 
    a.[planned user], 
    b.[actual user], 
    a.[invoice plan] as 'invoice' 
from vPlan a 
inner join vActuals b on a.step = b.step 
group by 
    a.step, 
    a.[planned user], 
    b.[actual user], 
    a.[invoice plan] 

union all 

Select 
    'Actuals' as Type, 
    a.step, 
    b.[planned user], 
    a.[actual user], 
    a.[invoice actuals] as 'invoice' 
from vActuals a 
inner join vPlan b on a.step = b.step 
group by 
    a.step, 
    a.[actual user], 
    b.[planned user], 
    a.[invoice actuals] 
2

类似@ texastonie的回答,但更换group byselect distinct

Select Distinct 
    'Plan' as type, 
    vPlan.step, 
    vPlan.[planned user], 
    vPlan.[invoice plan] as 'invoice', 
    vActuals.[actual user] 
from vPlan 
inner join vActuals 
    on vPlan.step = vActuals.step 
union 
Select Distinct 
    'Actuals' as type, 
    vActuals.step, 
    vPlan.[planned user], 
    vActuals.[invoice actuals] as 'invoice', 
    vActuals.[actual user] 
from vActuals 
inner join vPlan 
    on vActuals.step = vPlan.step 
; 
+0

肯定应该使用不同的分组。我想知道我们是否真的需要一个独特的。 – theo