Name time type
--------------------------------------------
Abc 2014-01-11 10:41:37.000 In
Abc 2014-01-11 18:12:37.000 Out
def 2014-01-07 18:25:37.000 In
def 2014-01-07 20:00:02.000 Out
如何在SQL Server中按名称和按名称拆分此数据?结果应该如下所示
Name IN Out
---------------------------------------------------------
Abc 2014-01-11 10:41:37.000 2014-01-11 18:12:37.000
def 2014-01-07 18:25:37.000 2014-01-07 20:00:02.000
请帮帮我
答案 0 :(得分:5)
将它们配对(进出)如何,如果这就是你需要的。然后你可以过滤“in”并始终在那之后找到最近的相应“out”。我想这里的答案可能非常复杂或非常简单,具体取决于您的数据(假设是什么以及它们有多脏)。
在以下示例中,[log]表包含您的数据。
select name,
time as [In],
(select top 1 time from [log] il where il.name=ol.name and il.time>ol.time order by il.time) as [Out]
from [log] ol
where type='in'
希望有所帮助。
答案 1 :(得分:0)
我想在sql server中引入pivot,开发人员通常在这些情况下使用它: http://technet.microsoft.com/en-us/library/ms177410(v=sql.105).aspx
http://blogs.msdn.com/b/spike/archive/2009/03/03/pivot-tables-in-sql-server-a-simple-sample.aspx
对于您的示例,我正在构建一个表并使用pivot来解决您的问题:
创建表#temp(Name varchar(10),[time] datetime,type char(3) )
提供一些样本数据
插入#temp SELECT' Abc' ,' 2014-01-11 10:41:37.000',' In' 联合所有SELECT' Abc' ,' 2014-01-11 18:12:37.000',' Out'联盟 所有SELECT' def',' 2014-01-07 18:25:37.000',' In'联合所有 SELECT' def' ,' 2014-01-07 20:00:02.000',' Out'
这是透视查询
SELECT Name,[IN],[OUT] FROM(选择NAme,[Time],[Type] from #temp)InnerTBL PIVOT
(([时间])FOR [类型]中的[[IN],[OUT]))TBL