我使用UNION ALL加入了4个sql语句。
由于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)
答案 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 )
答案 1 :(得分: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)
答案 2 :(得分: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