0

我使用 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)
4

3 回答 3

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 ) 
于 2013-08-29T08:31:02.537 回答
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)
于 2013-08-29T08:34:06.717 回答
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
于 2014-04-24T20:09:34.357 回答