select t1.EmpNo,t1.statYear,t1.statMonth,(ISNULL(t1.Fee,0)+ISNULL(t2.Fee,0)) AS Fee FROM
(Select A.EmpNo,B.LowestSalary/26/8*A.TimeCount AS Fee,A.statYear,A.statMonth 
FROM TB_EmpDuty A,TC_LowestSalary B Where A.DutyNo=01) t1
left join
(Select A.EmpNo,(B.LowestSalary/26/8*A.TimeCount + floor(A.TimeCount/4)*50 ) AS Fee,A.statYear,A.statMonth
FROM TB_EmpDuty A, TC_LowestSalary B WHere A.DutyNo=03) t2
On t1.EmpNo=t2.EmpNo AND t1.statYear=t2.statYear AND t1.statMonth=t2.statMonth
t1的结果:
EmpNo    Fee            statYear  statMonth
4054 17.307692 2009    1
4055 17.307692 2009    1
t2的结果:
EmpNo    Fee            statYear  statMonth
4054 65.384615 2009    1
4054 65.384615 2009    2
我想要的结果是
EmpNo     Fee      statYear   statMonth
4054 82.692307   2009   1
4055 17.307692   2009   1
4054 65.384615   2009          2
可是执行结果是:
EmpNo     Fee      statYear   statMonth
4054 82.692307   2009   1
4055 17.307692   2009   1怎么实现我要的结果?

解决方案 »

  1.   


    DECLARE @t1 TABLE 
    (
    Empno INT,fee DECIMAL(12,6), StratYear INT,StartMonth INT
    )
    INSERT INTO @t1 
    SELECT 4054, '17.307692', 2009,   1 UNION ALL 
    SELECT 4055, '17.307692', 2009,   1
    DECLARE @t2 TABLE 
    (
    Empno INT,fee DECIMAL(12,6), StratYear INT,StartMonth INT
    )
    INSERT INTO @t1 
    SELECT 4054, '65.384615', 2009,   1 UNION ALL 
    SELECT 4054, '65.384615', 2009,   2SELECT T.empno,SUM(T.Fee) Fee,T.StratYear,T.[StartMonth] FROM (
    SELECT * FROM @t1 
    UNION ALL SELECT * FROM @t2) T
    GROUP BY T.[StartMonth],empno,StratYearempno       Fee                                     StratYear   StartMonth
    ----------- --------------------------------------- ----------- -----------
    4054        82.692307                               2009        1
    4055        17.307692                               2009        1
    4054        65.384615                               2009        2
      

  2.   


    select EmpNo,statYear,statMonth,sum(Fee) AS Fee FROM
    (Select A.EmpNo,B.LowestSalary/26/8*A.TimeCount AS Fee,A.statYear,A.statMonth 
    FROM TB_EmpDuty A,TC_LowestSalary B Where A.DutyNo=01
    union all
    Select A.EmpNo,(B.LowestSalary/26/8*A.TimeCount + floor(A.TimeCount/4)*50 ) AS Fee,A.statYear,A.statMonth
    FROM TB_EmpDuty A, TC_LowestSalary B WHere A.DutyNo=03) t2
    group by empno,statyear,statmonth
      

  3.   


    DECLARE @t1 TABLE 
    (
    Empno INT,fee DECIMAL(12,6), StratYear INT,StartMonth INT
    )
    INSERT INTO @t1 
    SELECT 4054, '17.307692', 2009,   1 UNION ALL 
    SELECT 4055, '17.307692', 2009,   1
    DECLARE @t2 TABLE 
    (
    Empno INT,fee DECIMAL(12,6), StratYear INT,StartMonth INT
    )
    INSERT INTO @t1 
    SELECT 4054, '65.384615', 2009,   1 UNION ALL 
    SELECT 4054, '65.384615', 2009,   2SELECT T.empno,SUM(T.Fee) Fee,T.StratYear,T.[StartMonth] ,cn = count(StratYear)FROM (
    SELECT * FROM @t1 
    UNION ALL SELECT * FROM @t2) T
    GROUP BY T.[StartMonth],empno,StratYearempno       Fee                                     StratYear   StartMonth  cn
    ----------- --------------------------------------- ----------- ----------- -----------
    4054        82.692307                               2009        1           2
    4055        17.307692                               2009        1           1
    4054        65.384615                               2009        2           1(3 row(s) affected)
      

  4.   

    select EmpNo , sum(Fee) Fee , statYear , statMonth from

    select t1.EmpNo,t1.statYear,t1.statMonth,(ISNULL(t1.Fee,0)+ISNULL(t2.Fee,0)) AS Fee FROM
    (Select A.EmpNo,B.LowestSalary/26/8*A.TimeCount AS Fee,A.statYear,A.statMonth 
    FROM TB_EmpDuty A,TC_LowestSalary B Where A.DutyNo=01) t1
    union all
    (Select A.EmpNo,(B.LowestSalary/26/8*A.TimeCount + floor(A.TimeCount/4)*50 ) AS Fee,A.statYear,A.statMonth
    FROM TB_EmpDuty A, TC_LowestSalary B WHere A.DutyNo=03) t2
    On t1.EmpNo=t2.EmpNo AND t1.statYear=t2.statYear AND t1.statMonth=t2.statMonth
    ) m
    group by EmpNo , statYear , statMonth