Sql 带insert语句的CTE函数

Sql 带insert语句的CTE函数,sql,sql-server,Sql,Sql Server,我有两个查询,需要将它们与insert语句组合成一个查询 这是我的第一个已包含insert语句的查询: with q as ( select s.department ,s.months ,s.years ,count(case when s.sum_lost_time >='10:00:00' then NAME end) as RTOTALLOSTTIME ,count(cas

我有两个查询,需要将它们与insert语句组合成一个查询

这是我的第一个已包含insert语句的查询:

with q as (
      select s.department
           ,s.months
           ,s.years     
           ,count(case when s.sum_lost_time >='10:00:00' then NAME end) as RTOTALLOSTTIME
           ,count(case when s.sum_ot >='20' then NAME end) as ROT
     from (select MONTH(STATUSIN)  as [months]
                   ,YEAR(STATUSIN) as [years]
                   ,NIP
                   ,NAME
                   ,DEPARTMENT         
                   ,convert(varchar,dateadd(second,sum(datediff(second,'00:00:00',cast(TOTALLT as time))),0),108) as sum_lost_time
                   ,SUM(CAST(OT AS FLOAT)) as sum_ot
              from SUMMARYDATA b 
          group by MONTH(STATUSIN)
                   ,YEAR(STATUSIN)
                   ,NIP
                   ,NAME
                   ,DEPARTMENT
            )s
    group by  s.department
             ,s.months
             ,s.years  
     )
INSERT INTO REPORTDATA(DEPARTMENT,MONTHS,YEARS,RTOTALLOSTTIME,ROT)
SELECT DEPARTMENT,MONTHS,YEARS,RTOTALLOSTTIME,ROT
FROM q
这是表
REPORTDATA
中第一次查询的结果:

这是我的第二个问题

WITH cte AS 
(
    SELECT DISTINCT [NAME], DEPARTMENT, MONTH(STATUSIN) [MONTH], YEAR(STATUSIN) [YEAR], 
        SUM(CASE WHEN LATECOME = '00:00:00' THEN 0 ELSE 1 END) OVER(PARTITION BY [NAME], DEPARTMENT, MONTH(STATUSIN), YEAR(STATUSIN)) Total
        ,SUM(CASE WHEN EARLYLEAVE = '00:00:00' THEN 0 ELSE 1 END) OVER(PARTITION BY [NAME], DEPARTMENT, MONTH(STATUSIN), YEAR(STATUSIN)) TotalEarlyLeave 
    FROM SUMMARYDATA
)

SELECT SUM(CASE WHEN TOTAL > 2 THEN 1 ELSE 0 END) LATECOME, 
SUM(CASE WHEN TotalEarlyLeave > 1 THEN 1 ELSE 0 END) EARLYLEAVE
FROM cte
GROUP BY DEPARTMENT, [MONTH], [YEAR] 
这是第二次查询的结果:

我想把它放到我的第一个查询中,但我不知道如何在insert语句中将它组合成一个查询。有人能解决我的问题吗

这是我第一次查询的示例:
这是第二个查询的示例:

如果您将查询作为多个CTE连接起来,并最终将它们连接起来,那就很容易了

像这样:

;
with cte1 as (
      select s.department
           ,s.months
           ,s.years     
           ,count(case when s.sum_lost_time >='10:00:00' then NAME end) as RTOTALLOSTTIME
           ,count(case when s.sum_ot >='20' then NAME end) as ROT
     from (select MONTH(STATUSIN)  as [months]
                   ,YEAR(STATUSIN) as [years]
                   ,NIP
                   ,NAME
                   ,DEPARTMENT         
                   ,convert(varchar,dateadd(second,sum(datediff(second,'00:00:00',cast(TOTALLT as time))),0),108) as sum_lost_time
                   ,SUM(CAST(OT AS FLOAT)) as sum_ot
              from SUMMARYDATA b 
          group by MONTH(STATUSIN)
                   ,YEAR(STATUSIN)
                   ,NIP
                   ,NAME
                   ,DEPARTMENT
            )s
    group by  s.department
             ,s.months
             ,s.years  
     ),
cte2 as (
    SELECT DISTINCT [NAME], DEPARTMENT, MONTH(STATUSIN) [MONTH], YEAR(STATUSIN) [YEAR], 
        SUM(CASE WHEN LATECOME = '00:00:00' THEN 0 ELSE 1 END) OVER(PARTITION BY [NAME], DEPARTMENT, MONTH(STATUSIN), YEAR(STATUSIN)) Total
        ,SUM(CASE WHEN EARLYLEAVE = '00:00:00' THEN 0 ELSE 1 END) OVER(PARTITION BY [NAME], DEPARTMENT, MONTH(STATUSIN), YEAR(STATUSIN)) TotalEarlyLeave 
    FROM SUMMARYDATA
    ),
cte3 as (
    SELECT DEPARTMENT, [MONTH], [YEAR], SUM(CASE WHEN TOTAL > 2 THEN 1 ELSE 0 END) LATECOME, 
    SUM(CASE WHEN TotalEarlyLeave > 1 THEN 1 ELSE 0 END) EARLYLEAVE
    FROM cte2
    GROUP BY DEPARTMENT, [MONTH], [YEAR] 
    )
INSERT INTO REPORTDATA (DEPARTMENT, MONTHS, YEARS, RTOTALLOSTTIME, ROT, RLATECOME, REARLYLEAVE)
SELECT cte1.DEPARTMENT, cte1.MONTHS, cte1.YEARS, cte1.RTOTALLOSTTIME, cte1.ROT,
       cte3.LATECOME, cte3.EARLYLEAVE  
FROM cte1
     LEFT JOIN cte3 ON cte3.DEPARTMENT = cte1.DEPARTMENT and cte3.[MONTH] = cte1.[MONTH] and cte3.[YEAR] = cte1.[YEAR]

请提供示例数据、所需结果,并解释您希望代码执行的操作。感谢您的回复。。请检查我的最新问题。。我只想将我的第二个查询(列
RLATECOME
reallyleave
)与表
REPORTDATA
@GordonLinoff中的第一个查询结合起来这是我第一个查询的示例:这是第二个查询的示例:@GordonLinoff