SQL查询-我被难住了。。。不包括记录

SQL查询-我被难住了。。。不包括记录,sql,Sql,请参阅随附的mage,这是一名员工7天的记录。我想做的是排除所有员工记录7,如果每列ST、OT、DT、PayPerdiem、PayTruck、PayTravel的所有7个记录的总和等于零 基本上,如果任何总数大于0,并且所有雇员总数的记录都不等于0,那么我需要雇员的所有7条记录 因此,员工ATE不应返回任何记录,但员工BEADLING应返回7条记录 这有意义吗?有人能帮忙吗?这是为了提供一个数据透视表,经过几天的尝试,我简直搞不懂。请帮忙 如果某个员工至少有一行的值大于0,则可以使用如下方式返回

请参阅随附的mage,这是一名员工7天的记录。我想做的是排除所有员工记录7,如果每列ST、OT、DT、PayPerdiem、PayTruck、PayTravel的所有7个记录的总和等于零

基本上,如果任何总数大于0,并且所有雇员总数的记录都不等于0,那么我需要雇员的所有7条记录

因此,员工ATE不应返回任何记录,但员工BEADLING应返回7条记录

这有意义吗?有人能帮忙吗?这是为了提供一个数据透视表,经过几天的尝试,我简直搞不懂。请帮忙


如果某个员工至少有一行的值大于0,则可以使用如下方式返回该员工的所有记录:

rextester演示:

对于此示例数据:

create table t (Employee int, calendardate date, st int, ot int, dt int, payperdiem int, paytruck int, paytravel int)
insert into t values
 (1,'20170401',0,0,0,0,0,0)
,(1,'20170402',0,0,0,0,0,0)
,(1,'20170403',0,0,0,0,0,0)
,(1,'20170404',2,0,0,0,0,0) /* this one has a value */
,(2,'20170401',0,0,0,0,0,0)
,(2,'20170402',0,0,0,0,0,0)
,(2,'20170403',0,0,0,0,0,0)
,(2,'20170404',0,0,0,0,0,0)
返回:

+----------+--------------+----+----+----+------------+----------+-----------+
| Employee | calendardate | st | ot | dt | payperdiem | paytruck | paytravel |
+----------+--------------+----+----+----+------------+----------+-----------+
|        1 | 2017-04-01   |  0 |  0 |  0 |          0 |        0 |         0 |
|        1 | 2017-04-02   |  0 |  0 |  0 |          0 |        0 |         0 |
|        1 | 2017-04-03   |  0 |  0 |  0 |          0 |        0 |         0 |
|        1 | 2017-04-04   |  2 |  0 |  0 |          0 |        0 |         0 |
+----------+--------------+----+----+----+------------+----------+-----------+

如果可以使用负值,则可能需要比较总和


请尝试以下方法

SELECT CalendarDate,
       tblTable.Employee,
       PayCodeName,
       ST,
       OT,
       DT,
       PayPerdiem,
       PayTruck,
       PayTravel
FROM tblTable
JOIN ( SELECT Employee
       FROM tblTable
       GROUP BY Employee
       HAVING SUM( ST +
                   OT +
                   DT +
                   PayPerdiem +
                   PayTruck +
                   PayTravel ) > 0
     ) EmployeeFinder ON tblTable.Employee = EmployeeFinder.Employee
ORDER BY tblTable.Employee,
         CalenadrDate;
此语句首先按员工对tblTable中的每条记录进行分组,然后将该列表细化为所有总计字段总计大于0的组

然后使用tblTable对结果数据集执行内部联接,这将消除子查询结果中未出现的员工记录

然后选择tblTable的剩余记录的字段并对记录进行排序


如果您有任何问题或意见,请随时发表相应的意见。

没有附加图像?不过,将代码发布到您的问题中会更好。添加。抱歉-第一篇博文为了提高问题的质量,请将字段名和示例数据复制为问题中的文本表。请另外制作一个文本表,显示您希望结果如何显示。还请向我们展示您尝试过的代码(如果有)以及它产生的任何错误消息的全文。您的RDBMS是什么?MySQL Postgres?这是一个非常简单的站点,用于将数据转换为文本表,您可以从SSMS或excel等进行复制和粘贴:我认为这将只打印有非零值的行,而不是所有7行(如果其中一行在三列中的一列中有非零值)。真的吗?@Jackson不是真的。@Jackson我添加了一个简单的演示来说明。很好!谢谢,我在我们自己的数据库上尝试了类似的查询。这太棒了@斯坦尼奇试试这个,似乎是最有效的。我会记下来的,胡安。效果很好。
 SELECT t1.*
 FROM t as t1
 JOIN (SELECT Employee
       FROM t 
       GROUP BY Employee
       HAVING SUM(st) > 0
           OR SUM(ot) > 0
           OR SUM(dt) > 0
           OR SUM(payperdiem) > 0
           OR SUM(paytruck)   > 0
           OR SUM(paytravel)  > 0
      ) as t2
   ON t1.Employee = t2.Employee
SELECT CalendarDate,
       tblTable.Employee,
       PayCodeName,
       ST,
       OT,
       DT,
       PayPerdiem,
       PayTruck,
       PayTravel
FROM tblTable
JOIN ( SELECT Employee
       FROM tblTable
       GROUP BY Employee
       HAVING SUM( ST +
                   OT +
                   DT +
                   PayPerdiem +
                   PayTruck +
                   PayTravel ) > 0
     ) EmployeeFinder ON tblTable.Employee = EmployeeFinder.Employee
ORDER BY tblTable.Employee,
         CalenadrDate;