SQL Self加入以分隔用户和代理

时间:2016-03-12 19:11:29

标签: sql self-join

我正在尝试学习sql,并希望在我遇到的问题上得到帮助。

我有一张如下表格。

ticke no, created,  sender
1,  9:00 AM,    user
1,  9:30 AM,    agent
1,  10:00 AM,   user
1   5:00 PM agent
2   11:00 AM    user
2,  1:00 PM,    user
2,  3:00 PM,    agent
3,  2:00 PM,    agent
3,  2:30 PM,    user
3,  9:00 PM,    agent
3,  10:00 PM,   user
4,  11:00 PM,   agent

我需要将Sender字段分成两列,一列只填充用户,另一列只填充代理。得到这样的东西

ticke no, created,  User, Agent
1,  9:00 AM,    user, NULL
1,  9:30 AM,    NULL, agent
1,  10:00 AM,   user, NULL
1   5:00 PM,    NULL, agent
2   11:00 AM    user, NULL
2,  1:00 PM,    user, NULL
2,  3:00 PM,    NULL, agent
3,  2:00 PM,    NULL, agent
3,  2:30 PM,    user, NULL
3,  9:00 PM,    NULL, agent
3,  10:00 PM,   user, NULL
4,  11:00 PM,   NULL, agent

以下是我最接近的尝试。因为我是初学者,所以我很失落。

Select TestDN.dbo.ServiceDoc.[Ticket Number], TestDN.dbo.ServiceDoc.[Created     At] as UserTime, TestDN.dbo.ServiceDoc.Sender as UserSender,
(
    select TestDN.dbo.ServiceDoc.Sender as AgentSender
    from TestDN.dbo.ServiceDoc
    where TestDN.dbo.ServiceDoc.Sender = 'agent'
)
from TestDN.dbo.ServiceDoc
where TestDN.dbo.ServiceDoc.Sender = 'user'

1 个答案:

答案 0 :(得分:1)

您只需要case声明:

Select sd.[Ticket Number], sd.[Created     At] as UserTime, 
       (case when sender = 'user' then sender end) as sender,
       (case when sender = 'agent' then sender end) as agent
from TestDN.dbo.ServiceDoc sd
where sd.Sender = 'user';