sql - 如何连接两个不同的行
问题描述
我在 Sql Server 中有一个表,其中记录了一个人的进入和退出,进入和退出记录在不同的行中,所以我在查询中尝试做的是能够在单行中显示一个人的进入和退出,我尝试的是放置 DISTINCT 或 GROUP BY,我认为单行中的联合是可能的,但它没有,它显示我的字段为空:
这是我的查询:
SELECT
ICA.Fecha_Hora,
Convert(nvarchar,ICA.Fecha_Hora,106) as 'Fecha',
CASE
WHEN ITA.Id_Tp_Acso = 2 THEN convert(nvarchar,ICA.Fecha_Hora ,108)
END AS 'Entrada',
CASE
WHEN ITA.Id_Tp_Acso = 1 THEN convert(nvarchar,ICA.Fecha_Hora ,108)
END AS 'Salida'
FROM
Intranet.DBO.Int_Control_Acceso ICA
INNER JOIN Intranet.DBO.Int_Tipo_Acceso ITA ON ITA.Id_Tp_Acso = ICA.Id_Tp_Acso
INNER JOIN Bit_V3.dbo.BIO_Programacion_Detalle BPD ON ICA.Id_IE = BPD.Id_IE
WHERE
CONVERT(date,ICA.Fecha_Hora) BETWEEN ISNULL('25/05/2021','01/01/2020') and ISNULL('25/05/2021',GETDATE()) AND
CONVERT(date,BPD.FechaInicio) BETWEEN ISNULL('25/05/2021','01/01/2020') and ISNULL('25/05/2021',GETDATE()
解决方案
You can join the same table twice. For simplification, imagine this is our table:
CREATE TABLE UserAction (
ID int identity(1,1) PRIMARY KEY,
UserID int,
ActionType int,
ActionDateTime datetime)
Then, to do what you are wanting to do:
SELECT UserID, enter.ActionDateTime as EnterDateTime
FROM UserAction enter
JOIN UserAction exit on enter.UserID = exit.UserID
WHERE enter.ActionType = 1
AND exit.ActionType = 2
Of course, if you have more than one enter record and/or more than one exit record for a given user, then you have to account for that.
推荐阅读
- r - 找到到一组的最小距离
- excel - 在一封电子邮件中发送所有到期日期,并复制到期日期行数据
- macos - 代码签名失败;请手动重试。Electron 框架:bundle 格式不明确(可能是应用程序或框架)
- javascript - 未捕获的类型错误:没有名为“获取值”的方法 - 使用语义 ui 获取值以进行多选
- android - Flutter 中的 svg 操作(与用户交互)
- gradle - Gradle 脚本语法
- php - 从 php url $url 中删除空格
- amazon-web-services - 尝试使用 cloudformation 在 AWS greengrass 版本 2 中创建 iot 组件时出错
- android - Jetpack compose 停止观察数据
- python - 如何优雅地处理 Selenium 中的 NoSuchElementElement 异常?