2011-05-05 188 views
1

我想从一个表中相互没有关系的三个项目(除了它们是顺序的事实以外)并将它们放在一行上。另一个数据透视表查询

所以该表可能是这样的:

time show 
12PM smallville 
1PM House 
2PM walking dead 

我知道如何根据时间来获得三个项目,但我需要的答案是这样的:

col1  col2  col3 
smallvile House walking dead 

一切我有看到的是基于某种形式的关联使用select中的多个列,我没有这样的关联我只想要我选择显示在三列中的一行中的三件事。

+0

解决方案,这将有很大的不同,这取决于你正在使用的数据库管理系统。例如,在SQL Server上工作的东西在MySQL或Oracle上不起作用,如果你在谈论Excel数据透视表,上面的解决方案都不会起作用。您需要提供更多信息。 – 2011-05-05 19:10:09

+0

通常化妆品和演示文稿在应用程序代码中要容易得多 - 在php或python中需要1-2行。 – peufeu 2011-05-05 22:14:18

+0

你可以修改我的下面的答案来达到你想要的:)快乐编码 – Japongskie 2015-09-23 03:39:46

回答

1

如果这个问题是关于SLQ服务器,而不是Excel中,然后像下面是你在找什么:

Select [12PM],[1PM],[2PM],... 
from (
select time, show from tablename 
) as sourcetable 
PIVOT (
Max(Show) for Time in [12PM],[1PM],[2PM],... 
) as PivotTable 

查看MSDN进一步参考上Pivot Tables

+0

哦。问题是“时间专栏”充满了将包含整个日程安排的时间表,我需要它选择当前时间和当前时间之后的两个节目。所以我不能做一个选择的时间。对不起,这是MYsql。谢谢! – 2011-05-05 20:29:07

+0

也,我会扔掉时间信息。唯一重要的是演出名称。 – 2011-05-05 20:41:35

0

只需放置一个标识来操作数据透视表,下面的代码就是我的示例。希望能帮助到你。

CREATE TABLE #Temp (ID INT IDENTITY NOT NULL, [Time] VARCHAR(20), Show VARCHAR(100)) 

    INSERT INTO #Temp ([Time] , Show) 
    SELECT '12PM', 'smallville' UNION SELECT '1PM', 'House' UNION SELECT '2PM', 'walking dead' 

    SELECT [1], [2], [3] 
     FROM ( 
    SELECT Show, ID FROM #Temp 
    ) As src 
    PIVOT 
     (Max(Show) FOR ID IN ([1], [2], [3])) AS pvt 

enter image description here