【问题标题】:Using one date variable between two SELECT statements with INNER JOIN and GROUP BY在两个带有 INNER JOIN 和 GROUP BY 的 SELECT 语句之间使用一个日期变量
【发布时间】:2021-03-06 05:06:51
【问题描述】:

我有一个表格,其中包含以下列:日期、员工姓名、班次编号(1,2 或 3)。我想汇总数据以根据所选日期(即到此指定日期)接收特定员工的轮班次数。我需要查看以下列:日期、员工姓名、班次编号(1,2 或 3)、班次总数到第一列中指定的日期。

将 INNER JOIN 与两个 SELECT 语句一起使用,我可以获得所有日期的班次总数,例如(班次 1):

SELECT *
FROM employees a
INNER JOIN (SELECT employee, COUNT(value) AS shifts FROM employees WHERE value='1' GROUP BY employee) b ON b.employee=a.employee
WHERE date>='2020-11-05'

如何更改我的查询以仅显示每个员工在选定日期之前的班次总和?

感谢您的帮助!

编辑:按要求提供样本数据,我有什么:

   date      employee   value
2020-11-05       X        1
2020-11-05       Y        2
2020-11-05       Z        3
2020-11-06       X        1
2020-11-06       Y        2
2020-11-06       Z        3

我需要什么:

   date      employee   value   shifts_1
2020-11-05       X        1        1
2020-11-05       Y        2        0
2020-11-05       Z        3        0
2020-11-06       X        1        2
2020-11-06       Y        2        0
2020-11-06       Z        3        0

总而言之,在这种情况下,最后一列应显示在指定日期之前分配给每个员工的第一次轮班次数。

【问题讨论】:

  • 请提供样本数据、所需结果和适当的数据库标签。

标签: sql database group-by inner-join


【解决方案1】:

SELECT *, b.SumOfShifts, b.shifts 来自员工 INNER JOIN (SELECT employee, COUNT(value) AS shifts, SUM(value) as SumOfShifts FROM employees WHERE value='1' GROUP BY employee) b ON b.employee=a.employee WHERE 日期>='2020-11-05'

【讨论】:

  • 'Value' 指定在给定日期为员工分配了哪个班次,因此查询结果不幸的是:“操作数数据类型 varchar 对 sum 运算符无效。”
  • 哦 - 我理解错了问题。你试过了吗:SET iValue = CAST(ValueAS int)
  • 嗯,在将值转换为 int 并使用您的答案中的确切查询后,我得到两列(班次和 SumOfShifts)具有相同的值,这是每个员工所有第一次班次的总和,但这无论指定日期如何,值都是恒定的。
  • SELECT *, b.shifts FROM employees a INNER JOIN (SELECT employee, COUNT((CAST(value AS int))) AS shifts FROM employees WHERE value='1' GROUP BY employee) b ON b.employee=a.employee WHERE date>='2020-11-05'.
  • 不幸的是,它给出了类似的结果,无论指定日期如何,我都会得到所有第一个班次(总数)的总和。
猜你喜欢
  • 2020-07-21
  • 2012-08-03
  • 2019-07-09
  • 1970-01-01
  • 2015-10-07
  • 2018-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多