如何选择行到列?

问题描述 投票:-2回答:4

在下面的示例中,如何填充person_events表如图所示?

到目前为止我所拥有的:

insert into person_events
select p.id, null, null, null, null, null, null
from persons p
sql sql-server tsql
4个回答
2
投票

为什么你需要这张新表person_events

你已经有了表tickets来保存personevents之间的关系。因此,您可以使用以下查询来获取具有相关事件信息的人员:

SELECT p.ID, e.ID, e.date 
FROM tickets t 
   INNER JOIN person p ON t.person_id = p.ID 
   INNER JOIN events e ON t.event_id = e.ID
WHERE p.ID = 1

demo on dbfiddle.uk

每次更改person_eventsperson数据时,您还必须更改events表上的数据。因此,在规范化数据库上使用简单查询(如上所述)将是最佳解决方案。


0
投票

你的这个方法之间缺少“值”,请你的更改查询,请在询问之前通过在sql中运行来检查它。这是一个简单的问题。

插入person_events值从p中选择p.id,null,null,null,null,null,null


0
投票

试试这个:

insert into person_events
select p.id
    ,1
    ,MAX(CASE WHEN event_id = 1 then e.date end)
    ,2
    ,MAX(CASE WHEN event_id = 2 then e.date end)
    ,3
    ,MAX(CASE WHEN event_id = 3 then e.date end)
from persons p
JOIN tickets t ON t.person_id = p.id
JOIN events e ON t.event_id = e.id
GROUP BY p.id

0
投票

为什么要创建person_events表格?如果你做的事情

SELECT tickets.person_id, events.id, events.date
FROM tickets INNER JOIN events on ( events.id = tickets.event_id )

这不是你想要的结果吗?

© www.soinside.com 2019 - 2024. All rights reserved.