【问题标题】:SUM Queries using UNION使用 UNION 的 SUM 查询
【发布时间】:2014-02-05 10:15:51
【问题描述】:
+------+-----------+---------------+---------+
|Period|EmOrg      |Total Hours O S|FTE_T    |
+------+-----------+---------------+---------+
|201304|BOT/GBE/T00|1067           |6.35119  |
+------+-----------+---------------+---------+
|201304|RSA/BDV/T00|352            |2.095238 |
+------+-----------+---------------+---------+
|201304|RSA/BDV/T00|374            |1.888888 |
+------+-----------+---------------+---------+
|201304|RSA/BFN/T00|198            |1        |
+------+-----------+---------------+---------+
|201304|RSA/BFN/T00|2581           |15.363095|
+------+-----------+---------------+---------+
|201304|RSA/CPT/T00|783            |3.954545 |
+------+-----------+---------------+---------+
|201304|RSA/CPT/T00|4176           |24.857142|
+------+-----------+---------------+---------+
|201304|RSA/DUR/T00|609            |3.075757 |
+------+-----------+---------------+---------+
|201304|RSA/DUR/T00|3978.5         |23.681547|
+------+-----------+---------------+---------+
|201304|RSA/JNB/T00|1545           |7.80303  |
+------+-----------+---------------+---------+
|201304|RSA/JNB/T00|6948.5         |41.360119|
+------+-----------+---------------+---------+
|201304|RSA/KNY/T00|2832           |16.857142|
+------+-----------+---------------+---------+
|201304|RSA/PLZ/T00|557            |2.813131 |
+------+-----------+---------------+---------+
|201304|RSA/PLZ/T00|3817.5         |22.723214|
+------+-----------+---------------+---------+
|201304|RSA/PTA/T00|1173           |5.924242 |
+------+-----------+---------------+---------+
|201304|RSA/PTA/T00|5813           |34.60119 |
+------+-----------+---------------+---------+
|201304|RSA/PZB/T00|5626.5         |28.416666|
+------+-----------+---------------+---------+
|201304|RSA/PZB/T00|24896.75       |148.19494|
+------+-----------+---------------+---------+
|201304|RSA/SMD/T00|1238           |7.369047 |
+------+-----------+---------------+---------+
选择 LD.Period, LD.EmOrg,Sum(LD.RegHrs) AS 'Total Hours O S' , Sum(LD.RegHrs)/198 AS 'FTE_T' FROM SSI.dbo.LD LD 按 LD.Period、LD.EmOrg、LD.EmType 分组 有(LD.EmOrg Like '%T00')和(LD.EmType='S') 联盟 选择 LD.Period, LD.EmOrg, Sum(LD.RegHrs) AS 'Total Hours O S' , Sum(LD.RegHrs)/168 AS 'FTE_T' FROM SSI.dbo.LD LD WHERE (LD.EmType In ('C','T','U')) AND (LD.EmOrg Like '%T00') 按 LD.Period、LD.EmOrg 分组

我真的想添加我的 ToTal Hours OS & FTE_T 以在一个月内返回 jst 一个值(例如)添加 201304 RSA/BDV/T00 726 和 3.984126 而不是两个单独的值我该怎么做我已经在查询中使用了 Sum 方法和 UNION? 非常感谢您的帮助

【问题讨论】:

    标签: sql sum union add union-all


    【解决方案1】:

    我认为此查询不需要union。您可以只使用条件聚合。假设第一个查询中的 198 是一个错字:

    SELECT LD.Period, LD.EmOrg,
           Sum(case when LD.EmType in (LD.EmType In ('C','T','U', 'S') then LD.RegHrs
                    else 0
               end) AS "Total Hours O S" ,
           Sum(case when LD.EmType in (LD.EmType In ('C','T','U', 'S') then LD.RegHrs)/198
                    else 0
               end) AS "FTE_T"
    FROM SSI.dbo.LD LD
    WHERE LD.EmOrg Like '%T00'
    GROUP BY LD.Period, LD.EmOrg, LD.EmType;
    

    如果不是:

    SELECT LD.Period, LD.EmOrg,
           Sum(case when LD.EmType in (LD.EmType In ('C','T','U', 'S') then LD.RegHrs
                    else 0
               end) AS "Total Hours O S" ,
           Sum(case when LD.EmType in (LD.EmType In ('S') then LD.RegHrs)/198
                    when LD.EmType in (LD.EmType In ('C','T','U', 'S') then LD.RegHrs)/168
                    else 0
               end) AS "FTE_T"
    FROM SSI.dbo.LD LD
    WHERE LD.EmOrg Like '%T00'
    GROUP BY LD.Period, LD.EmOrg, LD.EmType;
    

    我还将列别名的单引号更改为双引号。尽管一些数据库为此目的支持单引号,但它很容易出错。单引号只能用于字符串常量。

    【讨论】:

    • 问题是我使用了联接,因为我从 2 个不同的 Excel 工作表中获取数据,这就是为什么我使用该选项而不是创建关系的原因,所有简单的方法是在 2 个工作表之间创建一个 UNION。 可能听起来很疯狂,bt 使用 Windows 查询服务我遇到了很多限制,这就是我停留在最后一页的原因。
    • @SProgrammer 。 . .您的示例查询仅引用from 子句中的一个表:SSI.dbo.LD。那不是 Excel 工作表,它是数据库中的一个表。
    【解决方案2】:
    Period  EmOrg            GrandTotal     Division
    201304  BOT/GBE/T00          1067        6.1
    201304  RSA/BDV/T00          726         3.9
    201304  RSA/BFN/T00          2779        15.7
    201304  RSA/CPT/T00          4959        27.7
    201304  RSA/DUR/T00          4587.5      25.7
    201304  RSA/JNB/T00          8493.5      47.3
    201304  RSA/KNY/T00          2832        16.1
    201304  RSA/PLZ/T00          4374.5      24.5
    201304  RSA/PTA/T00          6986        39
    201304  RSA/PZB/T00          30523.25    169.9
    201304  RSA/SMD/T00          1238        7
    

    这个代码就像魔法一样工作

    SELECT 
         Period, 
         EmOrg, 
         ROUND(Sum(Total_H),2) As GrandTotal, 
         ROUND(Sum(FTE_O),1) As Division
    FROM(
    SELECT 
         LD.Period, 
         LD.EmOrg, 
         Sum(LD.RegHrs) AS 'Total_H', 
         Sum(LD.RegHrs)/176 AS 'FTE_O'
    FROM SSI.dbo.LD LD
    WHERE (LD.EmType In ('C','T','U')) AND (LD.EmOrg Like '%T00')
    GROUP BY LD.Period, LD.EmOrg
    UNION
    SELECT 
          LD.Period, 
          LD.EmOrg, 
          Sum(LD.RegHrs) AS 'Total_H', 
          Sum(LD.RegHrs)/198 AS 'FTE_O'
    FROM SSI.dbo.LD LD
    WHERE (LD.EmType='S') AND (LD.EmOrg Like '%T00')
    GROUP BY LD.Period, LD.EmOrg)AS counts
    GROUP BY Period, EmOrg
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-01
      • 2023-04-06
      • 2016-02-29
      • 1970-01-01
      相关资源
      最近更新 更多