2016-10-04 3 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

Вы можете использовать условную агрегацию:

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

благодарит за ваш быстрый ответ. действительно ценю это. но позвольте мне немного изменить свой вопрос. Мне нужно суммировать вывод двух запросов, набрав один запрос? я могу сделать это ? – Majed

+0

@majed. , , Если вам нужно суммировать значения, просто используйте '+' между выражениями в 'select'. –

0

Вы можете сделать объединение (слева, потому что два выбор не совпадает eamemid) на столах dinamyc

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