如何在没有任何聚合函数的情况下转动输出类型

时间:2017-03-28 07:52:49

标签: sql-server crystal-reports

我的桌子有很多像这样的记录。



EventDateTime	Event Desc	 EventType
10:00 AM	Any Description	 Start
10:45 AM	Any Description	 Stop
11:00 AM	Any Description	 Start
11:25 AM	Any Description	 Stop




基本上我想要两种事件类型之间的时差。 所以我想要这样的输出。



 EventDateTime	EventDateTime	Event_Desc	    EventType	EventType	Diff
 10:00 AM	    10:45 AM	    Any Description	Start	    Stop	    45 Min




可以通过PIVOT或其他任何方式在SQL中使用吗? 我想在水晶报告中显示相同内容。

1 个答案:

答案 0 :(得分:1)

我写了下面的代码,它似乎对我有用。我测试了一下,希望它有所帮助!

我使用dense_rank来模拟事件的ID,这样我就可以根据开始时间和结束时间识别单个事件,假设连续记录属于同一事件:

我创建了一个名为table2的新表(我的临时表,以重新创建您的问题),我存储了排名值:

if object_id('tempdb..#table2') is not null drop table #table2
create table #table2 (eventdatetime time, [rank] int, descr varchar(199),eventtype varchar(150))

insert into #table2
select eventdatetime, DENSE_RANK() OVER (PARTITION BY eventtype ORDER BY eventdatetime asc) AS Rank, descr, eventtype 
from #table1  -- this is your table with events
order by eventdatetime

select t.eventdatetime start_time, t2.eventdatetime end_time,  t2.descr [event_descr], t.eventtype, t2.eventtype, datediff(mi, t.eventdatetime, t2.eventdatetime) [Diff]
from #table2 t2 join #table2 t on t2.rank = t.rank and t2.eventdatetime >  t.eventdatetime
order by t2.eventdatetime

Here you can see the results I got from this query