0

我创建了 3 个名为 complete_shifts、incomplete_shifts 和不完整_shift_register 的表。所有三个表都包括 2 列,称为 employee_no 和 date。我想在指定日期从所有三个表中获取employee_no 列中不同值的计数。

例如:如果我指定“ date = 2013-06-13 ”,那么 count 应该是3。(员工编号:0008,0019,0035

完成班次

shift_id |   date   | employee_no | sign_in_at | sign_out_at

1        |2013-06-13|   0008      | 7:05       | 16:05
2        |2013-06-13|   0008      | 7:10       | 16:05
3        |2013-06-14|   0025      | 7:11       | 16:10

不完整的班次

 shift_id  |    date   | employee_no |  sign_in_at |sign_out_at

   1       | 2013-06-13|    0019     |   7:08      |    

不完整的移位寄存器

 shift_id |   date    |employee_no | sign_in_at

  1       | 2013-06-13|   0008     |    7:08
  2       | 2013-06-13|   0035     |    7:09
  3       | 2013-06-14|   0060     |    7:11

我不知道如何为上述情况编写 SQL 语法...请帮助我..

谢谢你。

4

3 回答 3

1

像这样的东西怎么样

SELECT  COUNT(DISTINCT employee_no) cnt_employee_no
FROM    (
    SELECT  employee_no
    FROM    complete_shifts
    WHERE   date = '2013-06-13'
    UNION 
    SELECT  employee_no
    FROM    incomplete_shifts
    WHERE   date = '2013-06-13'
    UNION 
    SELECT  employee_no
    FROM    incomplete_shift_register
    WHERE   date = '2013-06-13'
    )

使用

UNION 语法

UNION 用于将多个 SELECT 语句的结果组合成一个结果集。

COUNT(DISTINCT expr,[expr...])

返回具有不同非 NULL expr 值的行数。

于 2013-06-14T16:22:27.623 回答
0

只是UNION桌子在一起和COUNT。将UNION删除重复项,所以一个简单COUNT的就可以了 -COUNT DISTINCT不需要 a 。如果您只想要计数,这将起作用;如果您想要其他值,则查询会涉及更多:

SELECT COUNT(*) FROM (
  SELECT employee_no
    FROM complete_shifts
    WHERE date = '2013-06-13'
  UNION SELECT employee_no
    FROM incomplete_shifts
    WHERE date = '2013-06-13'
  UNION SELECT employee_no
    FROM incomplete_shift_register
    WHERE date = '2013-06-13'
 ) AllShifts
于 2013-06-14T16:22:06.850 回答
0
SELECT count(*) from 
(
SELECT 1 from complete_shifts WHERE date="2013-06-13"
UNION ALL
SELECT 1 from incomplete_shifts WHERE date="2013-06-13"
UNION ALL
SELECT 1 from incomplete_shift_register WHERE date="2013-06-13"
)t
于 2013-06-14T16:23:37.137 回答