【问题标题】:How do I merge the output from 2 separate temp tables into a single query?如何将 2 个单独的临时表的输出合并到一个查询中?
【发布时间】:2018-01-28 08:24:35
【问题描述】:

我正在使用 SQL Server 2012 并且我有 2 个单独的 T-SQL 查询,我正在尝试将它们合并为一个查询。

查询 1:

   USE MyDatabase
   SELECT [Col A], [Col B], [Col C]
   INTO #TempTable
   FROM MyList
   WHERE [Date] >= '2018-01-01'

   SELECT * FROM #TempTable

   PIVOT(SUM([Col B]) 
   FOR [Col A] IN ([Jan], [Feb], [Mar], [Apr], [May], [Jun], [Jul], [Aug], [Sep], [Oct], [Nov], [Dec])) AS PVTTable

查询 2:

   USE MyDatabase
   SELECT [Col A], [Col B], [Col C]
   INTO #TempTable2
   FROM MyList
   WHERE [StayDate] >= '2018-01-01'
   AND [DateCreated] <= '2018-01-27'

  SELECT * FROM #TempTable2

  PIVOT(SUM([Col B]) 
   FOR [Col A] IN ([Jan], [Feb], [Mar], [Apr], [May], [Jun], [Jul], [Aug], [Sep], [Oct], [Nov], [Dec])) AS PVTTable

我尝试过使用UNION ALL语法,如下:

   USE MyDatabase
   SELECT [Col A], [Col B], [Col C]
   INTO #TempTable
   FROM MyList
   WHERE [StayDate] >= '2018-01-01'

   PIVOT(SUM([Col B]) 
   FOR [Col A] IN ([Jan], [Feb], [Mar], [Apr], [May], [Jun], [Jul], [Aug], [Sep], [Oct], [Nov], [Dec])) AS PVTTable


   UNION ALL

   SELECT [Col A], [Col B], [Col C]
   INTO #TempTable2
   FROM MyList
   WHERE [StayDate] >= '2018-01-01'
   AND [DateCreated] <= '2018-01-27'

   PIVOT(SUM([Col B]) 
   FOR [Col A] IN ([Jan], [Feb], [Mar], [Apr], [May], [Jun], [Jul], [Aug], [Sep], [Oct], [Nov], [Dec])) AS PVTTable

我的目标是将 2 个数据透视结果合并为一个输出表。但是,这是行不通的!如何重写此查询?

【问题讨论】:

  • 你能提供样本数据和你的预期输出吗?
  • 如果你想要一张桌子那你为什么要用两张桌子?
  • 您的查询真的有效吗?
  • @GordonLinoff 不,他们没有!我已经更新了它们。

标签: sql sql-server tsql union temp-tables


【解决方案1】:

如果您希望在一张表中使用此信息,则查询中将只有一个 into。对于UNION ALL,这是在第一个查询中:

   SELECT [Col A], [Col B], [Col C]
   INTO #TempTable
   FROM MyList
   WHERE [StayDate] >= '2018-01-01'

   PIVOT(SUM([Col B]) 
   FOR [Col A] IN ([Jan], [Feb], [Mar], [Apr], [May], [Jun], [Jul], [Aug], [Sep], [Oct], [Nov], [Dec])) AS PVTTable
   UNION ALL    
   SELECT [Col A], [Col B], [Col C]
   FROM MyList
   WHERE [StayDate] >= '2018-01-01'
   AND [DateCreated] <= '2018-01-27'

   PIVOT(SUM([Col B]) 
   FOR [Col A] IN ([Jan], [Feb], [Mar], [Apr], [May], [Jun], [Jul], [Aug], [Sep], [Oct], [Nov], [Dec])) AS PVTTable;

也就是说,我认为您的查询不起作用。此答案仅解决有关将数据保存到一个表的语法问题。

【讨论】:

  • 感谢您的帮助。我已经更新了查询中与枢轴构造相关的部分。我会试试你的解决方案。
猜你喜欢
  • 2019-07-25
  • 2014-07-07
  • 2021-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多