SQL Pivot表,因此选择列位于下方
好的,我有一张桌子,看起来像这样:SQL Pivot表,因此选择列位于下方,sql,pivot-table,Sql,Pivot Table,好的,我有一张桌子,看起来像这样: Date Table_1 Table_2 Table_3 ... Table_20 20140706 23 11 54 78 20140705 45 65 65 9 20140704 21 53 32 56 20140703 98
Date Table_1 Table_2 Table_3 ... Table_20
20140706 23 11 54 78
20140705 45 65 65 9
20140704 21 53 32 56
20140703 98 22 21 21
...
Table 20140706 20140705 20140704 20140703
Table_1 23 45 21 98
Table_2 11 65 53 22
Table_3 54 65 32 21
...
我想做的事情如下所示:
Date Table_1 Table_2 Table_3 ... Table_20
20140706 23 11 54 78
20140705 45 65 65 9
20140704 21 53 32 56
20140703 98 22 21 21
...
Table 20140706 20140705 20140704 20140703
Table_1 23 45 21 98
Table_2 11 65 53 22
Table_3 54 65 32 21
...
我对透视表非常陌生,甚至不知道从哪里开始。因为在Pivot表文章中,大多数时候您需要一个总和,或者一个单独的位置来进行透视,所以并不确定整个透视场景是如何工作的。感谢您的帮助。任何想知道的人,我通过使用组合变量设置我想要报告的日期,实现了我想要的结果。使用一堆
取消pivot
和透视
表格,以我需要的方式定位表格
这是我的密码:
declare @d1 varchar(10) = CAST(DATEADD(dd,-1,CAST(GETDATE() as Date)) as varchar(10))
declare @d2 varchar(10) = CAST(DATEADD(dd,-2,CAST(GETDATE() as Date)) as varchar(10))
declare @d3 varchar(10) = CAST(DATEADD(dd,-3,CAST(GETDATE() as Date)) as varchar(10))
declare @d4 varchar(10) = CAST(DATEADD(dd,-4,CAST(GETDATE() as Date)) as varchar(10))
declare @d5 varchar(10) = CAST(DATEADD(dd,-5,CAST(GETDATE() as Date)) as varchar(10))
declare @d6 varchar(10) = CAST(DATEADD(dd,-6,CAST(GETDATE() as Date)) as varchar(10))
declare @d7 varchar(10) = CAST(DATEADD(dd,-7,CAST(GETDATE() as Date)) as varchar(10))
declare @SQL varchar(8000)
SET @SQL =
'Select
*
From
(
Select
unpvt.[Table]
,unpvt.value
,unpvt.Date
From
ORIGINAL_TABLE
unpivot (
value
for [Table] in (Table_1
,Table_2
,Table_3
,...
,Table_35
)
) unpvt
Where
Date > cast(dateadd(dd,-8,getdate()) as date)
) ref
pivot (sum(ref.value)
for ref.Date in (
[' + @d1 + ']
,[' + @d2 + ']
,[' + @d3 + ']
,[' + @d4 + ']
,[' + @d5 + ']
,[' + @d6 + ']
,[' + @d7 + ']
)
) as pvt'
EXEC(@SQL)
您确定这需要在数据库层中完成吗?您没有更适合处理表示需要的其他层吗?如果在SQL中确实需要它,那么列和行的集合是固定的吗?SQL通常不喜欢生成具有不同列数的结果集——因此,如果必须满足这一要求,它可能是特定于产品的——在这种情况下,您使用的是什么数据库产品?该标记用于标准SQL语言。是的,它必须在SQL级别完成。是的,列数(表名)是固定的,行数在过去7天内是固定的。(表保留了所有天,但我只需要最后7天)所以输出列的名称要更改吗?SQL也不喜欢这样做。那么,再说一遍,你在用什么产品?我在用SSMS 2008。我知道,我正在尝试使用变量创建一个动态命名约定,获取日期并将其设置为varchar变量(
@d1
,@d2
,@d3
,等等)。但仍然不确定如何正确旋转。对不起,如果这没有意义=[