Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL查询入/出考勤_Sql_Sql Server - Fatal编程技术网

SQL查询入/出考勤

SQL查询入/出考勤,sql,sql-server,Sql,Sql Server,我有一个带有以下示例输出的两个表。 tb1在时间内,tb2在时间外 如果tb2中的行不在tb2中,或者tb1中的行不在tb1中,我希望构建一个查询以实现以下空值结果: 如果OINDX在表2中而不是在表1中,或者IINDX在表1中而不是在表2中,我需要获取null 这段代码创建了两个表来尝试代码和帮助我 CREATE TABLE [dbo].[TIMEIN]( [IINDX] [int] NULL, [USERID] [int] NULL, [Da

我有一个带有以下示例输出的两个表。 tb1在时间内,tb2在时间外

如果tb2中的行不在tb2中,或者tb1中的行不在tb1中,我希望构建一个查询以实现以下空值结果:


如果OINDX在表2中而不是在表1中,或者IINDX在表1中而不是在表2中,我需要获取null

这段代码创建了两个表来尝试代码和帮助我

  CREATE TABLE [dbo].[TIMEIN](
       [IINDX] [int] NULL,
       [USERID] [int] NULL,
       [Date] [date] NULL,
       [CHECKTIME] [datetime] NULL,
       [CHECKTYPE] [varchar](1) NULL
   ) ON [PRIMARY]
   INSERT [dbo].[TIMEIN]  VALUES (1, 60, CAST(N'2018-02-07' AS Date), CAST(N'2018-02-07T06:58:48.000' AS DateTime), N'I')
   INSERT [dbo].[TIMEIN]  VALUES (3, 60, CAST(N'2018-02-08' AS Date), CAST(N'2018-02-08T06:01:09.000' AS DateTime), N'I')
   INSERT [dbo].[TIMEIN]  VALUES (6, 60, CAST(N'2018-02-09' AS Date), CAST(N'2018-02-09T06:57:43.000' AS DateTime), N'I')
   INSERT [dbo].[TIMEIN]  VALUES (8, 60, CAST(N'2018-02-10' AS Date), CAST(N'2018-02-10T06:34:28.000' AS DateTime), N'I')
   INSERT [dbo].[TIMEIN]  VALUES (10, 60, CAST(N'2018-02-11' AS Date), CAST(N'2018-02-11T05:59:38.000' AS DateTime), N'I')
   INSERT [dbo].[TIMEIN]  VALUES (12, 60, CAST(N'2018-02-12' AS Date), CAST(N'2018-02-12T06:02:14.000' AS DateTime), N'I')
   INSERT [dbo].[TIMEIN]  VALUES (14, 60, CAST(N'2018-02-13' AS Date), CAST(N'2018-02-13T06:00:25.000' AS DateTime), N'I')
   INSERT [dbo].[TIMEIN]  VALUES (16, 60, CAST(N'2018-02-14' AS Date), CAST(N'2018-02-14T06:01:59.000' AS DateTime), N'I')
   INSERT [dbo].[TIMEIN]  VALUES (18, 60, CAST(N'2018-02-15' AS Date), CAST(N'2018-02-15T06:01:56.000' AS DateTime), N'I')
   INSERT [dbo].[TIMEIN]  VALUES (20, 60, CAST(N'2018-02-22' AS Date), CAST(N'2018-02-22T13:58:31.000' AS DateTime), N'I')
   INSERT [dbo].[TIMEIN]  VALUES (22, 60, CAST(N'2018-02-23' AS Date), CAST(N'2018-02-23T18:57:01.000' AS DateTime), N'I')
   INSERT [dbo].[TIMEIN]  VALUES (24, 60, CAST(N'2018-02-24' AS Date), CAST(N'2018-02-24T21:54:01.000' AS DateTime), N'I')
   INSERT [dbo].[TIMEIN]  VALUES (26, 60, CAST(N'2018-02-25' AS Date), CAST(N'2018-02-25T21:53:58.000' AS DateTime), N'I')
   INSERT [dbo].[TIMEIN]  VALUES (28, 60, CAST(N'2018-02-26' AS Date), CAST(N'2018-02-26T22:03:14.000' AS DateTime), N'I')
   INSERT [dbo].[TIMEIN]  VALUES (30, 60, CAST(N'2018-02-27' AS Date), CAST(N'2018-02-27T21:57:51.000' AS DateTime), N'I')

   CREATE TABLE [dbo].[TIMEOUT](
       [OINDX] [int] NULL,
       [USERID] [int] NULL,
       [Date] [date] NULL,
       [CHECKTIME] [datetime] NULL,
       [CHECKTYPE] [varchar](1) NULL
   ) ON [PRIMARY]
   INSERT [dbo].[TIMEOUT]  VALUES (1, 60, CAST(N'2018-02-07' AS Date), CAST(N'2018-02-07T15:59:32.000' AS DateTime), N'O')
   INSERT [dbo].[TIMEOUT]  VALUES (3, 60, CAST(N'2018-02-08' AS Date), CAST(N'2018-02-08T15:00:32.000' AS DateTime), N'O')
   INSERT [dbo].[TIMEOUT]  VALUES (4, 60, CAST(N'2018-02-08' AS Date), CAST(N'2018-02-08T15:00:34.000' AS DateTime), N'O')
   INSERT [dbo].[TIMEOUT]  VALUES (6, 60, CAST(N'2018-02-09' AS Date), CAST(N'2018-02-09T19:00:03.000' AS DateTime), N'O')
   INSERT [dbo].[TIMEOUT]  VALUES (8, 60, CAST(N'2018-02-10' AS Date), CAST(N'2018-02-10T15:31:16.000' AS DateTime), N'O')
   INSERT [dbo].[TIMEOUT]  VALUES (10, 60, CAST(N'2018-02-11' AS Date), CAST(N'2018-02-11T15:01:47.000' AS DateTime), N'O')
   INSERT [dbo].[TIMEOUT]  VALUES (12, 60, CAST(N'2018-02-12' AS Date), CAST(N'2018-02-12T15:03:06.000' AS DateTime), N'O')
   INSERT [dbo].[TIMEOUT]  VALUES (14, 60, CAST(N'2018-02-13' AS Date), CAST(N'2018-02-13T15:01:40.000' AS DateTime), N'O')
   INSERT [dbo].[TIMEOUT]  VALUES (16, 60, CAST(N'2018-02-14' AS Date), CAST(N'2018-02-14T15:00:34.000' AS DateTime), N'O')
   INSERT [dbo].[TIMEOUT]  VALUES (18, 60, CAST(N'2018-02-15' AS Date), CAST(N'2018-02-15T15:02:55.000' AS DateTime), N'O')
   INSERT [dbo].[TIMEOUT]  VALUES (20, 60, CAST(N'2018-02-22' AS Date), CAST(N'2018-02-22T22:20:42.000' AS DateTime), N'O')
   INSERT [dbo].[TIMEOUT]  VALUES (22, 60, CAST(N'2018-02-24' AS Date), CAST(N'2018-02-24T06:03:39.000' AS DateTime), N'O')
   INSERT [dbo].[TIMEOUT]  VALUES (24, 60, CAST(N'2018-02-25' AS Date), CAST(N'2018-02-25T07:04:37.000' AS DateTime), N'O')
   INSERT [dbo].[TIMEOUT]  VALUES (26, 60, CAST(N'2018-02-26' AS Date), CAST(N'2018-02-26T07:00:16.000' AS DateTime), N'O')
   INSERT [dbo].[TIMEOUT]  VALUES (28, 60, CAST(N'2018-02-27' AS Date), CAST(N'2018-02-27T07:04:08.000' AS DateTime), N'O')
   INSERT [dbo].[TIMEOUT]  VALUES (30, 60, CAST(N'2018-02-27' AS Date), CAST(N'2018-02-27T21:58:48.000' AS DateTime), N'O')
   INSERT [dbo].[TIMEOUT]  VALUES (31, 60, CAST(N'2018-02-28' AS Date), CAST(N'2018-02-28T07:00:18.000' AS DateTime), N'O')
您需要使用“右外部联接”:


我怀疑你真的想要一个
完全连接

select i.*, o.*  -- note duplicate column names
from ins i full join
     outs o
     on i.iindx = o.iindx and i.id = o.id;
请注意,这将允许您获得两侧的不匹配。

尝试此项

SELECT *
FROM TIMEIN t1
FULL JOIN TIMEOUT t2 ON t1.IINDX = t2.OINDX
输出

+--------+--------+------------+----------------------+-----------+-------+--------+------------+----------------------+-----------+
| IINDX  | USERID |    Date    |      CHECKTIME       | CHECKTYPE | OINDX | USERID |    Date    |      CHECKTIME       | CHECKTYPE |
+--------+--------+------------+----------------------+-----------+-------+--------+------------+----------------------+-----------+
| 1      | 60     | 2018-02-07 | 2018-02-07T06:58:48Z | I         |     1 |     60 | 2018-02-07 | 2018-02-07T15:59:32Z | O         |
| 3      | 60     | 2018-02-08 | 2018-02-08T06:01:09Z | I         |     3 |     60 | 2018-02-08 | 2018-02-08T15:00:32Z | O         |
| 6      | 60     | 2018-02-09 | 2018-02-09T06:57:43Z | I         |     6 |     60 | 2018-02-09 | 2018-02-09T19:00:03Z | O         |
| 8      | 60     | 2018-02-10 | 2018-02-10T06:34:28Z | I         |     8 |     60 | 2018-02-10 | 2018-02-10T15:31:16Z | O         |
| 10     | 60     | 2018-02-11 | 2018-02-11T05:59:38Z | I         |    10 |     60 | 2018-02-11 | 2018-02-11T15:01:47Z | O         |
| 12     | 60     | 2018-02-12 | 2018-02-12T06:02:14Z | I         |    12 |     60 | 2018-02-12 | 2018-02-12T15:03:06Z | O         |
| 14     | 60     | 2018-02-13 | 2018-02-13T06:00:25Z | I         |    14 |     60 | 2018-02-13 | 2018-02-13T15:01:40Z | O         |
| 16     | 60     | 2018-02-14 | 2018-02-14T06:01:59Z | I         |    16 |     60 | 2018-02-14 | 2018-02-14T15:00:34Z | O         |
| 18     | 60     | 2018-02-15 | 2018-02-15T06:01:56Z | I         |    18 |     60 | 2018-02-15 | 2018-02-15T15:02:55Z | O         |
| 20     | 60     | 2018-02-22 | 2018-02-22T13:58:31Z | I         |    20 |     60 | 2018-02-22 | 2018-02-22T22:20:42Z | O         |
| 22     | 60     | 2018-02-23 | 2018-02-23T18:57:01Z | I         |    22 |     60 | 2018-02-24 | 2018-02-24T06:03:39Z | O         |
| 24     | 60     | 2018-02-24 | 2018-02-24T21:54:01Z | I         |    24 |     60 | 2018-02-25 | 2018-02-25T07:04:37Z | O         |
| 26     | 60     | 2018-02-25 | 2018-02-25T21:53:58Z | I         |    26 |     60 | 2018-02-26 | 2018-02-26T07:00:16Z | O         |
| 28     | 60     | 2018-02-26 | 2018-02-26T22:03:14Z | I         |    28 |     60 | 2018-02-27 | 2018-02-27T07:04:08Z | O         |
| 30     | 60     | 2018-02-27 | 2018-02-27T21:57:51Z | I         |    30 |     60 | 2018-02-27 | 2018-02-27T21:58:48Z | O         |
| (null) | (null) | (null)     | (null)               | (null)    |     4 |     60 | 2018-02-08 | 2018-02-08T15:00:34Z | O         |
| (null) | (null) | (null)     | (null)               | (null)    |    31 |     60 | 2018-02-28 | 2018-02-28T07:00:18Z | O         |
+--------+--------+------------+----------------------+-----------+-------+--------+------------+----------------------+-----------+

SQL FIDLE:

提供您的表结构。从您的数据来看,它可能存在于out中,但不存在于in表中?或者它不能存在于一个或另一个?(即是所需的m中的一个)。这将取决于如何编写查询。另外,您使用的是哪个sql server版本?您有3个列表?完整/右侧外部连接-并且,用这些颜色帮助您的用户的眼睛!如果OINDX在表2中而不是在表1中,或者IINDX在表1中而不是在表2中,我需要获取null。无论分配OINDX/IINDX号的是什么,都已经为您做了最难的部分。我在中更新了此问题,如果OINDX在表2中而不是表1中,或者IINDX在表1中而不是表2中,请修改您的问题,那么,如果OINDX在表2中不在表1中,或者IINDX在表1中不在表2中,我需要获取null如果OINDX在表2中不在表1中,或者IINDX在表1中不在表2中,我需要获取null您尝试过提供的解决方案吗?完全联接就是这样做的。我可以不按顺序得到这个结果吗?如果不按顺序,你就不能得到那个结果,因为空数据会下降。这不是预期的结果。
+--------+--------+------------+----------------------+-----------+-------+--------+------------+----------------------+-----------+
| IINDX  | USERID |    Date    |      CHECKTIME       | CHECKTYPE | OINDX | USERID |    Date    |      CHECKTIME       | CHECKTYPE |
+--------+--------+------------+----------------------+-----------+-------+--------+------------+----------------------+-----------+
| 1      | 60     | 2018-02-07 | 2018-02-07T06:58:48Z | I         |     1 |     60 | 2018-02-07 | 2018-02-07T15:59:32Z | O         |
| 3      | 60     | 2018-02-08 | 2018-02-08T06:01:09Z | I         |     3 |     60 | 2018-02-08 | 2018-02-08T15:00:32Z | O         |
| 6      | 60     | 2018-02-09 | 2018-02-09T06:57:43Z | I         |     6 |     60 | 2018-02-09 | 2018-02-09T19:00:03Z | O         |
| 8      | 60     | 2018-02-10 | 2018-02-10T06:34:28Z | I         |     8 |     60 | 2018-02-10 | 2018-02-10T15:31:16Z | O         |
| 10     | 60     | 2018-02-11 | 2018-02-11T05:59:38Z | I         |    10 |     60 | 2018-02-11 | 2018-02-11T15:01:47Z | O         |
| 12     | 60     | 2018-02-12 | 2018-02-12T06:02:14Z | I         |    12 |     60 | 2018-02-12 | 2018-02-12T15:03:06Z | O         |
| 14     | 60     | 2018-02-13 | 2018-02-13T06:00:25Z | I         |    14 |     60 | 2018-02-13 | 2018-02-13T15:01:40Z | O         |
| 16     | 60     | 2018-02-14 | 2018-02-14T06:01:59Z | I         |    16 |     60 | 2018-02-14 | 2018-02-14T15:00:34Z | O         |
| 18     | 60     | 2018-02-15 | 2018-02-15T06:01:56Z | I         |    18 |     60 | 2018-02-15 | 2018-02-15T15:02:55Z | O         |
| 20     | 60     | 2018-02-22 | 2018-02-22T13:58:31Z | I         |    20 |     60 | 2018-02-22 | 2018-02-22T22:20:42Z | O         |
| 22     | 60     | 2018-02-23 | 2018-02-23T18:57:01Z | I         |    22 |     60 | 2018-02-24 | 2018-02-24T06:03:39Z | O         |
| 24     | 60     | 2018-02-24 | 2018-02-24T21:54:01Z | I         |    24 |     60 | 2018-02-25 | 2018-02-25T07:04:37Z | O         |
| 26     | 60     | 2018-02-25 | 2018-02-25T21:53:58Z | I         |    26 |     60 | 2018-02-26 | 2018-02-26T07:00:16Z | O         |
| 28     | 60     | 2018-02-26 | 2018-02-26T22:03:14Z | I         |    28 |     60 | 2018-02-27 | 2018-02-27T07:04:08Z | O         |
| 30     | 60     | 2018-02-27 | 2018-02-27T21:57:51Z | I         |    30 |     60 | 2018-02-27 | 2018-02-27T21:58:48Z | O         |
| (null) | (null) | (null)     | (null)               | (null)    |     4 |     60 | 2018-02-08 | 2018-02-08T15:00:34Z | O         |
| (null) | (null) | (null)     | (null)               | (null)    |    31 |     60 | 2018-02-28 | 2018-02-28T07:00:18Z | O         |
+--------+--------+------------+----------------------+-----------+-------+--------+------------+----------------------+-----------+
SELECT *
FROM [dbo].[TIMEIN] i
FULL JOIN [dbo].[TIMEOUT] o ON i.IINDX = o.OINDX
ORDER BY oINDX


+-------+--------+------+------------+-------------------------+-------+--------+------+------------+-------------------------+---+
| IINDX | USERID | Date | CHECKTIME  |        CHECKTYPE        | OINDX | USERID | Date | CHECKTIME  |        CHECKTYPE        |   |
+-------+--------+------+------------+-------------------------+-------+--------+------+------------+-------------------------+---+
|       | 1      | 60   | 2018-02-07 | 2018-02-07 06:58:48.000 | I     |      1 |   60 | 2018-02-07 | 2018-02-07 15:59:32.000 | O |
|       | 3      | 60   | 2018-02-08 | 2018-02-08 06:01:09.000 | I     |      3 |   60 | 2018-02-08 | 2018-02-08 15:00:32.000 | O |
|       | NULL   | NULL | NULL       | NULL                    | NULL  |      4 |   60 | 2018-02-08 | 2018-02-08 15:00:34.000 | O |
|       | 6      | 60   | 2018-02-09 | 2018-02-09 06:57:43.000 | I     |      6 |   60 | 2018-02-09 | 2018-02-09 19:00:03.000 | O |
|       | 8      | 60   | 2018-02-10 | 2018-02-10 06:34:28.000 | I     |      8 |   60 | 2018-02-10 | 2018-02-10 15:31:16.000 | O |
|       | 10     | 60   | 2018-02-11 | 2018-02-11 05:59:38.000 | I     |     10 |   60 | 2018-02-11 | 2018-02-11 15:01:47.000 | O |
|       | 12     | 60   | 2018-02-12 | 2018-02-12 06:02:14.000 | I     |     12 |   60 | 2018-02-12 | 2018-02-12 15:03:06.000 | O |
|       | 14     | 60   | 2018-02-13 | 2018-02-13 06:00:25.000 | I     |     14 |   60 | 2018-02-13 | 2018-02-13 15:01:40.000 | O |
|       | 16     | 60   | 2018-02-14 | 2018-02-14 06:01:59.000 | I     |     16 |   60 | 2018-02-14 | 2018-02-14 15:00:34.000 | O |
|       | 18     | 60   | 2018-02-15 | 2018-02-15 06:01:56.000 | I     |     18 |   60 | 2018-02-15 | 2018-02-15 15:02:55.000 | O |
|       | 20     | 60   | 2018-02-22 | 2018-02-22 13:58:31.000 | I     |     20 |   60 | 2018-02-22 | 2018-02-22 22:20:42.000 | O |
|       | 22     | 60   | 2018-02-23 | 2018-02-23 18:57:01.000 | I     |     22 |   60 | 2018-02-24 | 2018-02-24 06:03:39.000 | O |
|       | 24     | 60   | 2018-02-24 | 2018-02-24 21:54:01.000 | I     |     24 |   60 | 2018-02-25 | 2018-02-25 07:04:37.000 | O |
|       | 26     | 60   | 2018-02-25 | 2018-02-25 21:53:58.000 | I     |     26 |   60 | 2018-02-26 | 2018-02-26 07:00:16.000 | O |
|       | 28     | 60   | 2018-02-26 | 2018-02-26 22:03:14.000 | I     |     28 |   60 | 2018-02-27 | 2018-02-27 07:04:08.000 | O |
|       | 30     | 60   | 2018-02-27 | 2018-02-27 21:57:51.000 | I     |     30 |   60 | 2018-02-27 | 2018-02-27 21:58:48.000 | O |
|       | NULL   | NULL | NULL       | NULL                    | NULL  |     31 |   60 | 2018-02-28 | 2018-02-28 07:00:18.000 | O |
+-------+--------+------+------------+-------------------------+-------+--------+------+------------+-------------------------+---+