首页 > 解决方案 > 如何连接两个不同的行

问题描述

我在 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()

这就是它返回给我的内容:
在此处输入图像描述

标签: sqlsql-server

解决方案


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.


推荐阅读