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
,等等)。但仍然不确定如何正确旋转。对不起,如果这没有意义=[