2017-07-31 45 views
0

我有下面的SQL查询,它返回以下用于员工时间ATTENDANCE的输出。在SQL语句中选择大小写

注意当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 
+2

编辑你的问题,并提供样本数据和期望结果。 –

+0

看起来你必须为OutMin编写另一个查询(使用'InOut ='1''),并在'outletname'上加入两个子查询' –

回答

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'; 
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的落伍,让你也将获得一个没有记录的出口名称出来呢。

+0

谢谢,但我不想要找到“Outlet names hasn' t已注销“ – Ayman

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 
+0

消息156,级别15,状态1,行4 关键字'FROM'附近的语法错误。 Msg 156,Level 15,State 1,Line 13 关键字'FROM'附近的语法不正确。 – Ayman

+0

现在请尝试。我告诉过你,我写得很快,所以一些逗号仍在那里:) –

+0

嗨,感谢查询没有错误,但它返回空数据。 – Ayman