SQL查询:将一列中的数据用作另一个表中的列名?

时间:2018-12-09 08:03:35

标签: sql pivot sql-server-2016 ssrs-2016 ssms-2017

我正在努力从看起来像这样的表中获取数据:

Data Example

按水平显示,按GroupID分组,然后将开始/过程/停止时间(按此顺序)显示在单行上,如下所示:

enter image description here

我尝试编写一些SQL案例语句,但是无法正常工作。我遵循一些在线建议,说要在SSRS报表生成器的表中编写一个IIF表达式,但我无法使它正常工作。任何帮助都会很棒。

1 个答案:

答案 0 :(得分:1)

使用普通SQL,我认为这是您要查找的查询

SELECT
    bt.GroupID as 'ID',
    bt.EventStartTime as 'StartStartTime',
    bt.EventEndTime as 'StartEndTime',
    bt.TotalEventDuration as 'StartDuration',
    pt.EventStartTime as 'ProcessStartTime',
    pt.EventEndTime as 'ProcessEndTime',
    pt.TotalEventDuration as 'ProcessDuration',
    st.EventStartTime as 'StopStartTime',
    st.EventEndTime as 'StopEndTime',
    st.TotalEventDuration as 'StopDuration'
FROM
    PROCESS_LOG bt
    LEFT JOIN PROCESS_LOG pt ON
        bt.GroupID = pt.GroupID
    LEFT JOIN PROCESS_LOG st ON
        bt.GroupID = st.GroupID
WHERE
    bt.Event = 'Start'
AND pt.Event = 'Process'
AND st.Event = 'Stop'

我假设您必须开始才能处理和/或停止,这似乎并不现实。 想法是将表连接3次以提取每个事件的信息,GroupID是关联它们的“胶水”。