【问题标题】:SQL Server Pivot on this dataSQL Server 透视此数据
【发布时间】:2016-12-29 17:59:29
【问题描述】:

我在尝试旋转我的数据时遇到了困难:(它是动态数据,结构如下:

|    Date    |    Source    |    Amount    |
--------------------------------------------
| 12/1/2016  |    Source1   |      $0      |
| 12/1/2016  |    Source2   |      $2      |
| 12/1/2016  |    Source3   |      $5      |
| 12/1/2016  |    Source4   |      $4      |

可以有无限的来源,我想按来源/日期调整它:

|    Date    |    Source1    |    Source 2    |    Source 3    |    Source 4    |
--------------------------------------------------------------------------------------
| 12/1/2016  |    $0         |    $2          |    $5          |        $4      |

反正就是这样。

我已经尝试了很多编码方式,所以我只输入我认为可能的方式:

SELECT     myDate , Source, Amount
FROM         mydb

PIVOT
(max(source) FOR source IN (select distinct source from mydb) as myPivotTable

WHERE     (myDate > @StartDate)

当然,这是行不通的。这将成为存储过程的一部分,只是不完全存在。希望以这些数据为中心,以便我可以在 SSRS 中做一些线趋势。

我也跟着另一个例子尝试了这个:

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(source) 
                    from mydb where myDate > @StartDate
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

然后尝试使用它来代替“选择不同”。但是,来源是文本,这对我来说似乎没有多大作用。

【问题讨论】:

  • 我正在等待动态枢轴出现。
  • @GurwinderSingh 你让我咯咯笑

标签: sql-server tsql stored-procedures pivot-table


【解决方案1】:

这是一个简单的源动态透视

Declare @SQL varchar(max) = Stuff((Select Distinct ',' + QuoteName([Source]) From Yourtable  Order by 1 For XML Path('')),1,1,'') 
Select  @SQL = '
Select [Date],' + @SQL + '
From YourTable
 Pivot (sum(Amount) For [Source] in (' + @SQL + ') ) p'
Exec(@SQL);

返回

Date        Source1 Source2 Source3 Source4
2016-12-01  0       2       5       4

现在,如果您希望 Source 像 Source 1、Source 2 一样排序,则只需稍作调整

仅供参考,生成的 SQL 如下所示

Select [Date],[Source1],[Source2],[Source3],[Source4]
From YourTable
 Pivot (sum(Amount) For [Source] in ([Source1],[Source2],[Source3],[Source4]) ) p

【讨论】:

  • @GurwinderSingh 我能说什么,我很无聊,我真的不想打扫地下室。
  • 我还在学习如何去做。可能有一天我会在你之前做到这一点:P。 +1
  • @GurwinderSingh 我不相信这是真的。我已经看到了你的答案的质量。
  • 我主要从事 Oracle 方面的工作。所以,tsql 对我来说是新的。我正在努力让它变得更好。
  • 这不是我需要的,我走了一条不同的路,但这是一个答案,可能可行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-25
  • 2015-02-20
  • 2012-02-22
  • 2014-10-16
相关资源
最近更新 更多