2016-10-04 27 views
-1

我在fastreport下面有这些查询。我想将它们组合成一个查询。我怎样才能做到这一点 ?如何组合2个查询?

SELECT 
    EAMEMID, COUNT (EAMATTNSTATUS)/2 as ABSENTDAYS1 
FROM 
    viewDAILYSUM 
WHERE 
    (EAMEMID = :EAMEMID) 
    AND (EAMDATE BETWEEN :FDate AND :TDate) 
    AND (EAMATTNSTATUS IN (7, 8))   
GROUP BY 
    EAMEMID 
ORDER BY 
    EAMEMID 

SELECT 
    EAMEMID, COUNT(DISTINCT EAMDATE) ABSENTDAYS   
FROM 
    viewDAILYSUM 
WHERE 
    (EAMEMID = :EAMEMID) 
    AND (EAMDATE BETWEEN :FDate AND :TDate) 
    AND (EAMATTNSTATUS IN (6)) 
GROUP BY 
    EAMEMID 
ORDER BY 
    EAMEMID 

回答

0

可以使用条件汇总:在dinamyc表

SELECT EAMEMID, 
     SUM(CASE WHEN EAMATTNSTATUS in (7, 8) THEN 1 ELSE 0 END)/2 as ABSENTDAYS1, 
     COUNT(DISTINCT CASE WHEN EAMATTNSTATUS in (6) THEN EAMDATE 
      END) as ABSENTDAYS 
FROM viewDAILYSUM 
WHERE (EAMEMID = :EAMEMID) AND 
     (EAMDATE between :FDate and :TDate) 
GROUP BY EAMEMID 
ORDER BY EAMEMID 
+0

感谢您的快速回复。真的很感激它。 但让我稍微改变我的问题。我急需通过输入一个查询来总结2个查询的输出?我可以这样做吗? – Majed

+0

@majed。 。 。如果你需要对值进行求和,只需在'select'的表达式之间使用'+'。 –

0

你可以做一个连接(左因为这两个选择是不一样的eamemid)

select t1.EAMEMID, t1.ABSENTDAYS1, t2.ABSENTDAYS 
from ( SELECT EAMEMID , COUNT (EAMATTNSTATUS)/2 as ABSENTDAYS1 
     FROM viewDAILYSUM 
     WHERE (EAMEMID = :EAMEMID) 
     and (EAMDATE between :FDate and :TDate) 
     and (EAMATTNSTATUS in (7,8))   
     group by EAMEMID ) t1 
left join (SELECT EAMEMID ,COUNT(DISTINCT EAMDATE) ABSENTDAYS   
FROM viewDAILYSUM 
WHERE (EAMEMID = :EAMEMID) 
    and (EAMDATE between :FDate and :TDate) 
    and (EAMATTNSTATUS in (6))                
group by EAMEMID) t2 on t1.EAMEMID = t2.EAMEMID 
ORDER BY t1.EAMEMID 
+0

谢谢。真的很感激它 – Majed

0

您可以使用工会相同的方式:

SELECT * FROM 
(
    SELECT 
    1 AS NUMQUERY, EAMEMID, COUNT(EAMATTNSTATUS)/2 as ABSENTDAYS 
    FROM 
    viewDAILYSUM 
    WHERE 
    (EAMEMID = :EAMEMID) 
    AND (EAMDATE BETWEEN :FDate AND :TDate) 
    AND (EAMATTNSTATUS IN (7, 8))   
    GROUP BY 
    EAMEMID 

    UNION 

    SELECT 
    2, EAMEMID, COUNT(DISTINCT EAMDATE)   
    FROM 
    viewDAILYSUM 
    WHERE 
    (EAMEMID = :EAMEMID) 
    AND (EAMDATE BETWEEN :FDate AND :TDate) 
    AND (EAMATTNSTATUS IN (6)) 
    GROUP BY 
    EAMEMID 
) 
ORDER BY NUMQUERY, EAMEMID