对于无法提供信息的标题,我不知道如何命名此操作。这是一个我希望能提供帮助的例子。
我们有用户,我们为其记录事件。事件可以是不同类型的。我们想要生成一个报告(一个新表),它将说明一个事件是否发生在用户身上;例如:
Events x EventInfo = UserEvent
--- --- ---
UserId | EventId EventId | Type UserId | login | verify
------------------ ----------------- ------------------------
1 | 1 1 | login 1 | True | True
1 | 2 2 | verify 2 | False | False
2 | 3 3 | login
其他限制:
答案 0 :(得分:1)
你想要做的是表pivot
的一种形式。以下是使用conditional aggregation
的一个选项:
select e.userid,
max(case when ei.type = 'login' then 'True' else 'False' end) as login,
max(case when ei.type = 'verify' then 'True' else 'False' end) as verify
from events e
join eventinfo ei on e.eventid = ei.eventid
group by e.userid
如果outer join
表中的记录在event
表中不存在,则可能需要eventinfo
。
如果你不知道type
,你将不得不使用dynamic sql
,那里有很多例子: