各位大侠,我是个新人,求教一个问题,急
现在有4个表,每个表都有关联,我想根据我需要显示的字段内容把4个表相关联的地方整合成一个表,每个表的查询字段和我需要显示的字段内容如下:
Hrms_Dpt部门表         关联字段:DptId 部门ID             需要显示该字段内容的字段:DptName部门名称Hrms_Emp员工表      关联字段:EmpId员工ID      DptId部门ID        需要显示该字段内容的字段:
                                                                                                                                    EmpNo员工编号  
                                                                                                                                    EmpSex性别 
                                                                                                                                    EmpName员工姓名Com_EmpCard员工饭卡信息表    关联字段:EmpId员工ID    CardId饭卡IDPos_AccTransDetailBuzhu员工补助消费信息表,该表内存有所有员工的消费流水账,每消费一次就会产生一条记录,补助余额就会自动扣减,有消费时间记录,我想通过以上4个表查询出所有员工月末补助余额。
关联字段:CardId饭卡ID             EmpId员工ID            AccTransDay 消费时间         CardMoneyValue补助余额不知道我说的清不清楚,望各位大神解答,该怎么写查询语句才能得到我想要的结果?我觉得应该按照每月时间最大值来查?       

解决方案 »

  1.   

    select 
    *
    from (( Pos_AccTransDetailBuzhu a join Com_EmpCard b on a.CardId饭卡ID=b.CardId饭卡ID)
            join Hrms_Emp c on b.EmpId员工ID=c.EmpId员工ID)
            join Hrms_Dpt d on c.DptId 部门ID =d.DptId 部门ID 
      

  2.   

    余额--应该存放在Com_EmpCard里Pos_AccTransDetailBuzhu--充值和消费记录表
      

  3.   

    SELECT
    a.DptName
    ,b.EmpNo
    ,b.EmpName
    ,c.CardId
    ,COUNT(varchar(7),AccTransDay,120) AS 月份
    ,SUM(CardMoneyValue) AS 每月补助余额
    FROM Hrms_Dpt AS a
    INNER JOIN Hrms_Emp AS b ON b.DptId=a.DptId
    INNER JOIN Com_EmpCard AS c ON c.EmpId=b.EmpId
    INNER JOIN Pos_AccTransDetailBuzhu AS d ON d.CardId=c.CardId AND c.EmpId=d.EmpId
    GROUP BY 
    a.DptName
    ,b.EmpNo
    ,b.EmpName
    ,c.CardId
    ,COUNT(varchar(7),AccTransDay,120)按以上方法自己调整显示格式
      

  4.   

    感谢回复,可现在补助余额就是存放在Pos_AccTransDetailBuzhu员工补助消费信息表中的,2位大大提供的办法查不出月底余额啊,每一个员工每消费一次,在Pos_AccTransDetailBuzhu中就会增加一条记录,我怎么知道每月员工最后一次消费后的余额呢?
      

  5.   

    你是不是想要这样的效果:SELECT
        a.DptName
        ,b.EmpNo
        ,b.EmpName
        ,c.CardId
        ,d.AccTransDay
        ,d.CardMoneyValue 
    FROM Hrms_Dpt AS a
        INNER JOIN Hrms_Emp AS b ON b.DptId=a.DptId
        INNER JOIN Com_EmpCard AS c ON c.EmpId=b.EmpId
    inner join Pos_AccTransDetailBuzhu AS d ON d.CardId=c.CardId AND c.EmpId=d.EmpId
    inner join 
    (
    select CardId,EmpId,max(AccTransDay) AccTransDay from Pos_AccTransDetailBuzhu group by CardId,EmpId,convert(varchar(7),AccTransDay,120)
    ) e on d.CardId = e.CardId and d.EmpId = e.EmpId and d.AccTransDay = e.AccTransDay