TB_Employee
EmpNo EmpName EmpLevel GroupNo WorkDate   LevelDate AcccountNo
5403 反对 1 SF锐力组 2007-10-18 123456
5408 工党 2 SF锐力组 2007-10-22 123456
5429 和 3 SF锐力组 2007-10-22 123456
5412 华人 1 SF锐力组 2007-10-22 123456
5427 刘个 2 SF锐力组 2007-10-22 123456
5732 赫赫 3 SF锐力组 2008-3-12 123456
5737 吴怀仁 1 SF锐力组 2008-3-12 123456
5738 翟据 2 SF锐力组 2008-3-12 123456
5746 陈 3 SF锐力组 2008-3-12 123456
5735 韦 1 SF锐力组 2008-3-12 123456
5428 刘三 2 SF锐力组 2007-10-12 123456TB_OtherFee
ID      EmpNo  FeeItemNo   RegDate     FeeNum
6 5403 01   2009-1-2 20
7 5408 02   2009-1-5 50我想要的效果是 联合查询2个表,最终生成记录字段为: EmpNo\FeeNum,当TB_OtherFee中没有TB_Employee表中的EmpNo时,FeeNum 为0 否则为 TB_OtherFee中对应工号的 FeeNum
SELECT A.EmpNo, SUM(B.FeeNum) AS 扣罚, CONVERT(varchar(4), DATEADD(mm, - 1, 
      GETDATE()), 120) AS statYear, SUBSTRING(CONVERT(varchar(10), DATEADD(mm, - 1, 
      GETDATE()), 120), 6, 2) AS statMonth
FROM TB_Employee A,TB_OtherFee B
WHERE (FeeItemNo IN
          (SELECT FeeItemNo
         FROM TC_ChangeFeeItem
         WHERE FeeType = 0)) AND (CONVERT(varchar(7), RegDate, 120) 
      = CONVERT(varchar(7), DATEADD(mm, - 1, GETDATE()), 120))
GROUP BY A.EmpNo
--我这样查询出来的结果是没有符合我的第二个要求,高手整下

解决方案 »

  1.   

    SELECT A.EmpNo, ISNULL(SUM(B.FeeNum),0) AS 扣罚, CONVERT(varchar(4), DATEADD(mm, - 1, 
          GETDATE()), 120) AS statYear, SUBSTRING(CONVERT(varchar(10), DATEADD(mm, - 1, 
          GETDATE()), 120), 6, 2) AS statMonth
    FROM TB_Employee A left join TB_OtherFee B
    ON (FeeItemNo IN
              (SELECT FeeItemNo
             FROM TC_ChangeFeeItem
             WHERE FeeType = 0)) AND (CONVERT(varchar(7), RegDate, 120) 
          = CONVERT(varchar(7), DATEADD(mm, - 1, GETDATE()), 120))
    and a.EmpNo = b.EmpNo                                               --貌似楼主原来写掉这个关键条件
    GROUP BY A.EmpNo
      

  2.   


    6楼的方法好用, 好了, 我自己写的没用 left join 如果TB_OtherFee中没记录就白瞎了 xiexie
      

  3.   

    看来来晚了,
    友情up
    jjjjffff