我有以下SQL查询,它返回员工时间ATTENDANCE的以下输出。
注意,InOut = '0'
表示其中,如果InOut = '1'
表示其意味着。
查询:
SELECT
DATEPART(mi, LogTime) AS [InMin],
OutletName as [InOutletName]
FROM
[dbo].[AccessLog]
INNER JOIN
dbo.Outlets ON dbo.Outlets.OutletCode = dbo.AccessLog.TerminalID
WHERE
DATEPART(HOUR, LogTime) = '15'
AND InOut = '0'
AND CAST(LogDate AS date) = '2016-12-01'
输出:
InMin InOutletName
--------------------
47 GJ-SH1
我正在寻找获得OutMin, OutOutletName
的输出,这可以在InOut = '1'
期望的输出:
InMin InOutletName OutMin OutOutletName
-----------------------------------------
47 GJ-SH1 10 GJ-SH1
答案 0 :(得分:1)
我没有机会在我的SSMS中试用它,但必需的查询应该是这样的 -
SELECT
Case When InOut = '0' Then DATEPART(mi, LogTime) End AS [InMin],
Case When InOut = '0' Then OutletName End as [InOutletName],
Case When InOut = '1' Then DATEPART(mi, LogTime) End AS [OutMin],
Case When InOut = '1' Then OutletName End as [OutOutletName]
FROM
[dbo].[AccessLog]
INNER JOIN
dbo.Outlets ON dbo.Outlets.OutletCode = dbo.AccessLog.TerminalID
WHERE
DATEPART(HOUR, LogTime) = '15'
AND CAST(LogDate AS date) = '2016-12-01';
答案 1 :(得分:0)
一个简单的解决方案是加入AccessLog
表两次:
SELECT
DATEPART(mi, ali.LogTime) AS [InMin],
DATEPART(mi, alo.LogTime) AS [OutMin],
OutletName as [InOutletName]
FROM dbo.Outlets
INNER JOIN [dbo].[AccessLog] ali
ON dbo.Outlets.OutletCode = ali.TerminalID
LEFT JOIN [dbo].[AccessLog] alo
ON dbo.Outlets.OutletCode = al0.TerminalID AND CAST(ali.LogDate AS date) = CAST(alo.LogDate AS date) AND alo.InOut = '1'
WHERE DATEPART(HOUR, LogTime) = '15'
AND ali.InOut = '0'
AND CAST(ali.LogDate AS date) = '2016-12-01'
请注意,对于表示我已使用AccessLog
的日期的left join
,您还将获得尚未注销的Outlet名称。
答案 2 :(得分:0)
我刚刚写了它,不确定结果,但你可以尝试一下。它可能有所帮助:
;with InQuery as (SELECT
DATEPART(mi, LogTime) AS [InMin],
OutletName as [InOutletName]
FROM [dbo].[AccessLog]
INNER JOIN dbo.Outlets
ON dbo.Outlets.OutletCode = dbo.AccessLog.TerminalID
WHERE DATEPART(HOUR, LogTime) = '15'
AND InOut = '0'
AND CAST(LogDate AS date) = '2016-12-01'),
OutQuery As (SELECT
DATEPART(mi, LogTime) AS [OutMin],
OutletName as [OutOutletName]
FROM [dbo].[AccessLog]
INNER JOIN dbo.Outlets
ON dbo.Outlets.OutletCode = dbo.AccessLog.TerminalID
WHERE DATEPART(HOUR, LogTime) = '15'
AND InOut = '1'
AND CAST(LogDate AS date) = '2016-12-01')
select iq.*, oq.* from InQuery iq, OutQuery oq