简体   繁体   English

如何合并 2 个查询?

[英]How can I combine 2 queries?

I have these below queries in fastreport.我在 fastreport 中有以下查询。 I would like to combine them together into one query.我想将它们组合成一个查询。 How can I do this ?我该怎么做?

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

You can use conditional aggregation:您可以使用条件聚合:

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

You can do a join (left because the two select are not the same eamemid) on the dynamic tables你可以在动态表上做一个连接(因为两个选择不是同一个 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

You can use union same way:您可以使用union相同的方式:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM