Sql SSRS:将数据拆分为两列

Sql SSRS:将数据拆分为两列,sql,reporting-services,Sql,Reporting Services,我有一个SQL表,它有两个我感兴趣的列;事件时间和事件ID。事件ID存储开始和结束事件的数值(1表示开始,2表示结束)。每个事件都有一个关联的事件时间。我想做的是在SSRS报告中将这些行显示为列: Event_ID Event_Time 1 5/11/2017 9:50 AM 2 5/11/2017 9:55 AM 我想看看: Start Time End Time 5/11/2017 9:50 AM

我有一个SQL表,它有两个我感兴趣的列;事件时间和事件ID。事件ID存储开始和结束事件的数值(1表示开始,2表示结束)。每个事件都有一个关联的事件时间。我想做的是在SSRS报告中将这些行显示为列:

Event_ID     Event_Time
1            5/11/2017 9:50 AM
2            5/11/2017 9:55 AM
我想看看:

Start Time               End Time
5/11/2017 9:50 AM        5/11/2017 9:55 AM
Container ID        Start Time               End Time
17080430-002        5/11/2017 9:50 AM        5/11/2017 9:55 AM
下面是该表的外观:

编辑:

为了详细说明,该报告将显示按容器ID分组的数据。目前,该报告显示以下表格:

Container ID        Event ID          Event Time
17080430-002        1                 5/11/2017 9:50 AM
                    2                 5/11/2017 9:55 AM
我们希望看到:

Start Time               End Time
5/11/2017 9:50 AM        5/11/2017 9:55 AM
Container ID        Start Time               End Time
17080430-002        5/11/2017 9:50 AM        5/11/2017 9:55 AM
编辑2:

到目前为止,我在这方面有些运气:

select t1.Container_ID, t1.Event_Time Start, t2.Event_Time [End]
from (
select Container_ID, Event_Time,
   ROW_NUMBER() Over(Partition by Container_ID order by Event_Time) EventID
FROM dbo.Custom_EventLog WHERE Event_ID = '1'
) t1
LEFT JOIN (
SELECT Container_ID, Event_Time,
   ROW_NUMBER() Over(Partition by Container_ID order by Event_Time) EventID
from dbo.Custom_EventLog WHERE Event_ID = '2'
) t2
on (t1.Container_ID = t2.Container_ID and t1.EventID = t2.EventID)
但返回的表的时间未对齐,如图所示:


我不确定该表结构是否能告诉您哪些开始时间和结束时间对应于同一事件(除非您的问题中没有显示建立关系的另一列)

也就是说,您可以使用两个子查询来执行某些操作,这两个子查询通过
事件\u ID
进行过滤,例如:

SELECT (SELECT Event_Time FROM tableName WHERE Event_ID = 1) AS [Start Time],
       (SELECT Event_Time FROM tableName WHERE Event_ID = 2) AS [End Time]
我想这就是你想要的。我会用SQL而不是SSR来解决这个问题。临时表只是让我们实际处理一些数据

if object_id('tempdb.dbo.#events') is not null drop table #events
create table #events
(
    mainEventId int,
    eventId int,
    Event_Time datetime
)

insert into #events
select 200, 1, '5/11/2017 9:50 AM'
union all select 200, 2, '5/11/2017 9:55 AM'
union all select 300, 1, '5/11/2017 9:50 AM'
union all select 300, 2, '5/11/2017 9:55 AM'

select startTime.mainEventId, startTime.Event_Time, endTime.Event_Time
from #events startTime 
left join #events  as endTime
    on startTime.mainEventId = endTime.mainEventId
    and endTime.eventId = 2
where
    startTime.eventId = 1

我肯定会用SQL而不是SSRS来实现这一点。在我看来,你只需要做一个连接就可以解决这个问题——我下面的例子是一个内部连接,但是你可以很容易地修改它以使用左连接(或者其他什么)


希望这能有所帮助。

你尝试过什么,这种行为与你期望的有什么不同?你能给我们看一些代码吗?@Lewsterin我已经用代码更新了这个问题我试过了,但我得到一个错误,说子查询返回了超过1个值。这可以工作,但它不能处理没有结束记录的容器。有没有办法清理这件事,可能是通过排ID?哦,当然,只要离开加入结束时间。。。我将编辑查询。不知何故,时间仍然不一致。我认为这可能是因为数据在表中的方式,可能没有办法让它工作。