【问题标题】:How to exclude general criteria value from group by如何从分组中排除一般标准值
【发布时间】:2015-12-11 20:15:47
【问题描述】:

我有两张桌子:

一个用于员工数据Employee

另一个员工假期余额VacBal

现在我想获取每个员工的当前假期余额,如果 emp_num = 0 是所有员工的 general balance,而不是特定员工


如果员工表这样的样本数据:

emp_num   name
  546     john
  134     Ramy

VacBal 那样

emp_num  bal_num  bal_date
  546      1       5-5-2015
  546      2       6-5-2015
  134      1       7-5-2015
  0        3       2-2-2015
  0        4       6-1-2015

我想要这样的结果集:

emp_num  name  SUM(bal_num)
546      john    10             --->3+7
134      Ramy     8             --->1+7

如何做到这一点?

【问题讨论】:

  • 顺便说一句,您真的同时使用 MS SQL Server 和 Informix 吗? (非常罕见的组合。)

标签: sql sql-server join group-by informix


【解决方案1】:

您可以对SUM使用相关子查询:

select e.emp_num, e.name, (select sum(vb.bal_num) from VacBal vb
                           where vb.emp_num in (e.emp_num,0))
from Employee e

【讨论】:

    【解决方案2】:
    SELECT e.emp_num, 
           name, 
           Sum(bal_num) + (SELECT Sum(bal_num) 
                           FROM   vacbal vb 
                           WHERE  emp_num = 0) 
    FROM   employee e
              inner join vacbal v on e.emp_num=v.emp_num
    GROUP  BY e.emp_num, 
              name
    

    【讨论】:

    • ` Sum(bal_num) ` 在 employee 表中不存在
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多