2013-08-29 37 views
0

我已经通过使用UNION ALL加入了4个sql语句。SQL Union所有声明

由于WHERE条件相同,是否可以将WHERE条件合并为一个?

select 'Transfer In' as MovementType, * from vHRIS_StaffMovement_TransferIn 
where cur_deptid in (1,2,3,4,5) 
     and cast(EffectiveDate as date) <='2013-08-02' 
     and cast(EffectiveDate as date) >= '2012-08-01' 
     and StaffType in (1,2,3,4,5) 

union all 

     select 'Terminate' as MovementTyep, * from vHRIS_StaffMovement_Terminate 
where cur_deptid in (1,2,3,4,5) 
     and cast(EffectiveDate as date) <='2013-08-02' 
     and cast(EffectiveDate as date) >= '2012-08-01' 
     and StaffType in (1,2,3,4,5) 

union all 

     select 'New Hire' as MovementTyep, * from vHRIS_StaffMovement_NewHire 
where cur_deptid in (1,2,3,4,5) 
     and cast(EffectiveDate as date) <='2013-08-02' 
     and cast(EffectiveDate as date) >= '2012-08-01' 
     and StaffType in (1,2,3,4,5)  

union all 

select 'Transfer Out' as MovementType, * from vHRIS_StaffMovement_TransferOut 
where cur_deptid in (1,2,3,4,5) 
     and cast(EffectiveDate as date) <='2013-08-02' 
     and cast(EffectiveDate as date) >= '2012-08-01' 
     and StaffType in (1,2,3,4,5) 

回答

1

你可以这样来做:

select * from (
     select 'Transfer In' as MovementType, * from vHRIS_StaffMovement_TransferIn 
     union all 
     select 'Terminate' as MovementTyep, * from vHRIS_StaffMovement_Terminate 
     union all 
     select 'New Hire' as MovementTyep, * from vHRIS_StaffMovement_NewHire 
     union all 
     select 'Transfer Out' as MovementType, * from vHRIS_StaffMovement_TransferOut) as a 
where cur_deptid in (1,2,3,4,5) 
     and cast(EffectiveDate as date) <='2013-08-02' 
     and cast(EffectiveDate as date) >= '2012-08-01' 
     and StaffType in (1,2,3,4,5) 
+0

哎呀!殴打它! – Yonabart

+0

太棒了。多谢。 –

1

您可以使用子查询:

SELECT X.* 
FROM (SELECT 'Transfer In' AS MovementType, * 
     FROM vhris_staffmovement_transferin 

     UNION ALL 

     SELECT 'Terminate' AS MovementTyep, * 
     FROM vhris_staffmovement_terminate 

     UNION ALL 

     SELECT 'New Hire' AS MovementTyep, * 
     FROM vhris_staffmovement_newhire 

     UNION ALL 

     SELECT 'Transfer Out' AS MovementType, * 
     FROM vhris_staffmovement_transferout) X 
WHERE cur_deptid IN (1, 2, 3, 4, 5) 
     AND Cast(effectivedate AS DATE) <= '2013-08-02' 
     AND Cast(effectivedate AS DATE) >= '2012-08-01' 
     AND stafftype IN (1, 2, 3, 4, 5) 
0

你可以试试这个:

SELECT * 
    FROM T_IP_CHARGES WITH (NOLOCK) 
    WHERE PostingDate BETWEEN '01/01/2014' AND '01/31/2014' 
    AND DetailTotalCharges > 0 
    UNION ALL 
    SELECT * 
    FROM T_OP_CHARGES WITH (NOLOCK) 
    WHERE PostingDate BETWEEN '01/01/2014' AND '01/31/2014' 
    AND DetailTotalCharges > 0