现在和下一个电视节目信息SQL查询

pug*_*ugu 6 t-sql sql-server schedule

我的表格是多天和频道的预定电视节目列表.

SELECT * FROM [Scheduled_Programmes]

Channel   Date          Time     Title
1         2012-09-19    06:00    Family Guy
2         2012-09-19    06:01    CSI Miami
3         2012-09-19    06:20    News
1         2012-09-19    06:30    Heroes
2         2012-09-19    07:01    Spiderman
3         2012-09-19    06:40    Batman
1         2012-09-19    07:30    Micky Mouse
2         2012-09-19    07:31    CSI New York
3         2012-09-19    07:10    Friends
1         2012-09-19    07:55    The Wire
2         2012-09-19    08:00    Dodgeball
3         2012-09-19    07:35    Gossip Girl
Run Code Online (Sandbox Code Playgroud)

我想要创建的结果集是什么在现在和什么在下一个.

Let's assume the current datetime is (D/M/Y HH:MM) 19/09/2012 07:15 
Run Code Online (Sandbox Code Playgroud)

所以类似于:

          Channel 1     Channel 2       Channel 3
NOW       Heroes        Spiderman       Friends  
NEXT      Micky Mous    CSI New York    Gossip Girl
Run Code Online (Sandbox Code Playgroud)

我一直在绞尽脑汁寻找最佳方法,而无需为每个频道硬编码单独的查询.我觉得我现在已经过时了,所以如果有人能指出我正确的方向,那将会很棒.

谢谢

PS:如果它有所作为我在Microsoft SQL Server 2012上

Mag*_*und 3

这看起来确实像是你可以让你的 GIU 格式和旋转的东西,但这是我的尝试。

SELECT * FROM (
    SELECT * FROM (
        SELECT X.Status, X.Channel, X.Title FROM (
        SELECT 'NOW' as Status, Channel, Title, RANK() OVER (PARTITION BY Channel ORDER BY Time DESC) RANKED FROM Sceduled_Programs SP
        WHERE DateTime <= '7:15') X
        WHERE X.RANKED = 1
    ) A
    UNION ALL
        SELECT * FROM (
        SELECT Y.Status, Y.Channel, Y.Title FROM (
        SELECT 'NEXT' as Status, Channel, Title, RANK() OVER (PARTITION BY Channel ORDER BY Time ASC) RANKED FROM Sceduled_Programs SP
        WHERE DateTime > '7:15') Y
        WHERE Y.RANKED = 1
    ) B
) DataToPivot
PIVOT (MAX(Title) FOR Channel IN ([1], [2], [3])) AS PivotTable
Run Code Online (Sandbox Code Playgroud)

编辑:我在这里只使用时间,但只添加日期。您确实应该考虑合并日期和时间列。

Edit2:要添加日期,只需替换与此比较的时间。甚至应该超越日期界限。

WHERE CAST(Date AS DATETIME) + CAST(Time AS DATETIME) > '19/09/2012 07:15'
Run Code Online (Sandbox Code Playgroud)