我创建了3个名为complete_shifts,incomplete_shifts和incomplete_shift_register的表。所有三个表都包含2个名为employee_no和date的列。我想从指定日期的所有三个表中的employee_no列中获取不同值的计数。
例如:如果我指定“ 日期= 2013-06-13 ”,则计数为 3 。 (员工编号: 0008,0019,0035 )
complete_shifts
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
incomplete_shifts
shift_id | date | employee_no | sign_in_at |sign_out_at
1 | 2013-06-13| 0019 | 7:08 |
incomplete_shift_register
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语法... plezzz帮助我..
谢谢。答案 0 :(得分: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用于组合多个SELECT语句的结果 到一个结果集。
和
COUNT(DISTINCT expr,[expr...])
返回具有不同非NULL expr的行数 值。
答案 1 :(得分:0)
只需UNION
个表格和COUNT
。 UNION
将删除重复项,因此一个简单的COUNT
即可实现 - 不需要COUNT DISTINCT
。如果您只想要计数,这将有效;如果你想要其他值,那么查询会更加复杂:
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
答案 2 :(得分: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