如何选择行成列?

时间:2019-04-26 11:46:06

标签: sql sql-server tsql

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

到目前为止我所拥有的:

insert into person_events
select p.id, null, null, null, null, null, null
from persons p

4 个答案:

答案 0 :(得分: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表中的数据。因此,对规范化的数据库使用简单的查询(如上述查询)将是最佳解决方案。

答案 1 :(得分:0)

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

插入person_events 价值观 选择p.id,null,null,null,null,null,null 来自人p

答案 2 :(得分:0)

为什么要创建一个person_events表格? 如果您执行

之类的操作
SELECT tickets.person_id, events.id, events.date
FROM tickets INNER JOIN events on ( events.id = tickets.event_id )

这不是您想要的结果吗?

答案 3 :(得分: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