2011-05-05 187 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