将两个 SQL 语句的结果合并为一个显示新结果

Combining results from two SQL statements into one showing a new result

我有以下两个 SQL 语句(使用 SQL Server 2014)

SELECT 
    EMP_CLASS_1
    ,SUM(TOT_MI/60) AS [Absent hours]
FROM [TestData].[dbo].[Absenteeism and SLWP TCS Data]
WHERE CODE = 'MLSKU' OR CODE = 'UNPDAB' OR CODE = 'UNPADH'
GROUP BY EMP_CLASS_1
ORDER BY EMP_CLASS_1

第二个

SELECT 
    EMP_CLASS_1
    ,SUM(TOT_MI/60) AS [Schedule Hours]
FROM [TestData].[dbo].[Absenteeism and SLWP TCS Data]
WHERE code = 'attend'
GROUP BY EMP_CLASS_1
ORDER BY EMP_CLASS_1

我要做的是将第一个语句的结果除以第二个语句的结果。

到目前为止我还没有得到任何运气。

我对此还很陌生,请耐心等待。

在此先感谢您提供的任何帮助。

作为第二个问题,如果可能的话,我想在三个单独的列中同时显示所有三个结果。

假设您在两个查询之间有对应的行,您可以使用 JOIN:

WITH cte1 AS 
(
  SELECT EMP_CLASS_1
  ,SUM(TOT_MI/60) AS [Absent hours]
  FROM [TestData].[dbo].[Absenteeism and SLWP TCS Data]
  WHERE CODE IN('MLSKU' ,'UNPDAB' , 'UNPADH')
  GROUP BY EMP_CLASS_1
), cte2 AS
(
  SELECT EMP_CLASS_1
    ,SUM(TOT_MI/60) AS [Schedule Hours]
  FROM [TestData].[dbo].[Absenteeism and SLWP TCS Data]
  WHERE code = 'attend'
  GROUP BY EMP_CLASS_1
)
SELECT c1.EMP_CLASS_1
      ,c1.[Absent hours]
      ,c2.[Schedule Hours]
      ,[result] = c1.[Absent hours] / c2.[Schedule Hours]
FROM cte1 c1
JOIN cte2 c2
  ON c1.EMP_CLASS_1 = EMP_CLASS_1

或更简单:

SELECT EMP_CLASS_1
   ,SUM(IIF(CODE IN('MLSKU' ,'UNPDAB' , 'UNPADH'), TOT_MI, 0)  /60) AS [Absent hours]
   ,SUM(IIF(CODE ='attend', TOT_MI, 0) /60) AS [Schedule Hours]
   ,SUM(IIF(CODE IN('MLSKU' ,'UNPDAB' , 'UNPADH'), TOT_MI, 0)  /60) 
    / SUM(IIF(CODE ='attend', TOT_MI, 0) /60) AS [result]
FROM [TestData].[dbo].[Absenteeism and SLWP TCS Data]
WHERE CODE IN ('MLSKU' ,'UNPDAB' , 'UNPADH','attend')
GROUP BY EMP_CLASS_1
ORDER BY EMP_CLASS_1;

由于您正在查询相同的 table 并按同一列分组,因此您可以通过加入 where 子句来实现此目的,以便它们包含两组相关行并应用 sums on case 语句与原始条件。

注意,顺便说一句,第一个查询的 where 子句可以使用 in 运算符编写得更优雅:

SELECT   emp_class_1, 
         SUM(CASE WHEN code IN ('MLSKU', 'UNPDAB', 'UNPADH') THEN tot_mi/60 END) /
         SUM(CASE code WHEN 'attend' THEN tot_mi/60 END)
FROM     [TestData].[dbo].[Absenteeism and SLWP TCS Data]
WHERE    code IN ('MLSKU', 'UNPDAB', 'UNPADH', 'attend') 
GROUP BY emp_class_1
ORDER BY emp_class_1