如何在sql server 2012中的单独列中显示行数据

时间:2014-01-13 09:26:43

标签: sql-server-2012

我有这样的数据......

sample data

with cte as
(select    *, rn = row_number() over (partition by empid order by trtime)
 from [10.xx.xx.xx].[dbName].dbo.[tableName] where empid='00ec2137' and    trdate='01/13/2014'
)
select    i.empid,i.trdate, i.trtime InTime, o.trtime OutTime
from    cte i
 inner join cte o    on    i.empid    = o.empid
             and    i.rn     = o.rn - 1

where i.InOUt    = 1
and    o.InOUt = 2
order by i.empid,i.rn

InOut 1 - “In timing”和2 - “out timing”。我希望在单独的列中按顺序排序数据,如In Timing和Out Timing。我在SQL 2012中使用上面的查询来显示如下所示的数据

获取输出 Getting Output

预期输出 Requested Image

在输出中,它仅显示前两行。由于第三行没有Out timing 2,因此不显示第三行。请建议我如何更正代码。

2 个答案:

答案 0 :(得分:0)

简单我通过将内连接修改为左连接并删除o.InOUt = 2 in condtion

来实现此目的

答案 1 :(得分:0)

我认为问题在于where子句。请尝试使用where where子句:

where (i.InOUt    = 1)
and    (o.InOUt = 2 or o.InOUt is null)

这将在用户退出或仍然登录时显示。