SQL Self Join 分离用户和代理
SQL Self Join to separate users and agents
我正在努力学习 sql 并希望就我遇到的问题获得帮助。
我有一个 table 如下所示。
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
我需要将发件人字段分成两列,一列仅填充用户,另一列仅填充代理。得到这样的东西
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'
你只需要一个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';
我正在努力学习 sql 并希望就我遇到的问题获得帮助。
我有一个 table 如下所示。
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
我需要将发件人字段分成两列,一列仅填充用户,另一列仅填充代理。得到这样的东西
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'
你只需要一个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';