2012-03-18 51 views
0

實際上,我需要來自多個聯合語句的不同值,但我不明白這一點。從具有多個聯合值的查詢中獲取不同的值

My result which i get

這裏emp_id爲578有周末,在我需要單列不同行缺席。

我的代碼是這樣的。

   select [Employee Name],emp_id,holiDAY, 
       leave,absent,weekend 
       from 
       ( 

       SELECT *FROM  
       (    

         select view_emp_info.emp_fullname+' '+'('+''+CONVERT(VARCHAR(50), 


       (view_emp_info.EMP_ID)) +''+ ')' as [Employee 

       Name],view_emp_info.emp_id,tbl_emp_forceduty.Holiday_Name as 'HOLIDAY'  
       ,''AS LEAVE,'' AS ABSENT,'' AS [WEEKEND]  
       from view_emp_Info inner join tbl_emp_forceduty   



        on view_emp_info.emp_id=tbl_emp_forceduty.emp_id    
        where   
        [email protected] and   
        [email protected] and view_emp_info.emp_id not in     

       (Select emp_id from tbl_emp_attn_log where [email protected])    
       and view_emp_info.status_id=1    

        union    
        select view_emp_info.emp_fullname+' '+'('+    

        ''+CONVERT(VARCHAR(50),view_emp_info.EMP_ID) +''+ ')' as [Employee 

       Name],view_emp_info.emp_id,'' AS HOLIDAY 

       ,isnull(tbl_org_leave_log.leavetype,' ') 'LEAVE',  
       '' AS 'ABSENT',''AS 'WEEKEND'   
       from view_emp_info inner join tbl_org_leave_log    
       on view_emp_info.emp_id=tbl_org_leave_log.emp_id    
       where [email protected] and [email protected]    
      and view_emp_info.emp_id not in (Select emp_id from tbl_emp_attn_log where  

      [email protected])    
       and tbl_org_leave_log.Taken='0.5' and view_emp_info.status_id=1    

       union   
       select view_emp_info.emp_fullname+' '+'('+       

      ''+CONVERT(VARCHAR(50),view_emp_info.EMP_ID) +''+ ')' as [Employee 

      Name],view_emp_info.emp_id,'' AS HOLIDAY ,'' as [LEAVE]  


       ,'' AS 'ABSENT','Weekend'AS 'WEEKEND'   
      from view_emp_info inner join tbl_org_weekend    
      on view_emp_info.emp_id=tbl_org_weekend.emp_id or tbl_org_weekend.emp_id=0   
    where [email protected] and days=datepart(weekday,@date) and 
     is_weekend=1 and view_emp_info.emp_id not in (Select emp_id from          
     tbl_emp_attn_log where [email protected])   

     UNION  
      select view_emp_info.emp_fullname+' '+'('+  

     ''+CONVERT(VARCHAR(50),view_emp_info.EMP_ID) +''+ ')' as [Employee Name],  
     view_emp_info.emp_id,'' AS HOLIDAY, '' AS 'LEAVE','Absent' as 'ABSENT',''AS 
     'WEEKEND'   
    from view_emp_info inner join tbl_emp_attn_log    
on view_emp_info.emp_id!=tbl_emp_attn_log.emp_id   

      where [email protected] and  
      view_emp_info.emp_id not in (Select emp_id from tbl_emp_attn_log where         

     [email protected])  



      )  
     T1 where EMP_ID IN (SELECT EMP_ID FROM VIEW_EMP_INFO WHERE    

      [email protected]) 
      )t2 

回答

1

只是group by employee_name, employee_id, holiday, leave。然後在結果上應用一些聚合函數,如max(absent), max(weekend)

相關問題