【问题标题】:How to use dynamically pivot to generate timetable如何使用动态枢轴生成时间表
【发布时间】:2018-05-12 20:52:00
【问题描述】:

我想生成一个时间表,我有这些列:

Time      Itinerary      ID  
06:35       3579        87069                                                                                                                                                                                                                                                  
07:15       3031        63722                                                                                                                                                                                                                                                 
07:15       3031        68218                                                                                                                                                                                                                                                 
16:30       3031        82745                                                                                                                                                                                                                                                 
16:30       3031        88308                                                                                                                                                                                                                                                 
21:00       3031        72212                                                                                                                                                                                                                                                 
21:00       3031        76241                                                                                                                                                                                                                                                 
06:55       3576        87069                                                                                                                                                                                                                                                            
07:25       3333        63722                                                                                                                                                                                                                                                            
07:25       3333        68218                                                                                                                                                                                                                                                            
16:40       3333        82745    

我想得到这个:

            3579   3031   3576  3333
87069       06:35         06:55
63722              07:15
68218              07:15
  .
  .
  .

行程的数量是可变的,我可以从一张表中获取此信息。

【问题讨论】:

    标签: sql-server tsql pivot dynamic-sql


    【解决方案1】:

    动态 PIVOT 的完整工作示例:

    CREATE TABLE #DataSource
    (
        [Time] TIME
       ,[Itinerary] INT
       ,[ID] INT
    );
    
    INSERT INTO #DataSource ([Time], [Itinerary], [ID])
    VALUES ('06:35', '3579', '87069')
          ,('07:15', '3031', '63722')
          ,('07:15', '3031', '68218')
          ,('16:30', '3031', '82745')
          ,('16:30', '3031', '88308')
          ,('21:00', '3031', '72212')
          ,('21:00', '3031', '76241')
          ,('06:55', '3576', '87069')
          ,('07:25', '3333', '63722')
          ,('07:25', '3333', '68218')
          ,('16:40', '3333', '82745');
    
    DECLARE @DynammicTSQLStatement NVARCHAR(MAX)
           ,@DynamicPIVOTColumns NVARCHAR(MAX);
    
    
    SET @DynamicPIVOTColumns = STUFF
                              (
                                    (
                                    SELECT ',[' + CAST([Itinerary] AS VARCHAR(12)) + ']'
                                    FROM #DataSource
                                    GROUP BY [Itinerary]
                                    ORDER BY [Itinerary]
                                    FOR XML PATH('') ,TYPE
                                    ).value('.', 'NVARCHAR(MAX)')
                                    ,1
                                    ,1
                                    ,''
                              );
    
    SET @DynammicTSQLStatement = N'
    SELECT *
    FROM #DataSource
    PIVOT
    (
        MAX([Time]) FOR [Itinerary] IN (' + @DynamicPIVOTColumns + ')
    ) PVT';
    
    EXEC sp_executesql @DynammicTSQLStatement;
    
    DROP TABLE #DataSource;
    

    【讨论】:

      猜你喜欢
      • 2019-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多