Sql server 透视表未在SQL Server中显示数据

Sql server 透视表未在SQL Server中显示数据,sql-server,sql-server-2008,pivot,Sql Server,Sql Server 2008,Pivot,我是SQL Server新手,我面临着使用透视表显示数据的问题 我的表格结构如下: UserName VisitedDate Amount Visted bbb 2012-07-05 200 1 bbb 2012-06-03 300 3 ccc 2012-04-15 500 5 ccc 2012-06-30 600 3 我搜索

我是SQL Server新手,我面临着使用透视表显示数据的问题

我的表格结构如下:

 UserName    VisitedDate    Amount   Visted
    bbb     2012-07-05      200       1
    bbb     2012-06-03      300       3
    ccc     2012-04-15      500       5
    ccc     2012-06-30      600       3
我搜索了很多,发现了一些有用的东西,如:

DECLARE @Sql VARCHAR(8000)
DECLARE @ColumnNames VARCHAR(1000)
DECLARE @BeginDate DATETIME
DECLARE @EndDate DATETIME
declare @AAmount varchar(1000)

SET @BeginDate = '2012-4-1'
SET @EndDate = '2013-3-30'
SET @ColumnNames = ''
set @AAmount = ''

WHILE @BeginDate <= @EndDate
BEGIN
 SET @ColumnNames = @ColumnNames + ',[' + DateName(month,@BeginDate) + '_' +     Cast(Year(@BeginDate) AS VARCHAR(4)) + ']'
SET @AAmount = @AAmount + ',[' +'Amount'+ DateName(month,@BeginDate) + '_' +   Cast(Year(@BeginDate) AS VARCHAR(4)) + ']'
SET @BeginDate = DateAdd(Month, 1, @BeginDate)
END
IF Len(@ColumnNames) > 0
SET @ColumnNames = Right(@ColumnNames, Len(@ColumnNames) - 1)

PRINT @ColumnNames
IF Len(@AAmount) > 0
SET @AAmount = Right(@AAmount, Len(@AAmount) - 1)

PRINT @AAmount


SET @Sql = '
WITH U AS
(
  SELECT UserName, DateName(month,Visited_Date) + ''_'' + Cast(Year(Visited_Date) AS VARCHAR(4)) AS VisitedMonth,Amount,DateName(month,Visited_Date) + ''_'' + Cast(Year(Visited_Date) AS VARCHAR(4)) AS VisitedMonth1,Visited
    FROM Users 
)
SELECT  *
FROM U 

PIVOT (
SUM(Amount) FOR VisitedMonth IN (' + @ColumnNames + ')
) AS P1
PIVOT (
SUM(Visited) FOR VisitedMonth1 IN (' + @AAmount + ')
) AS  pivotable'


 EXEC (@Sql)
请注意,amt。标题中是金额

现在我的问题是:

对于表中的3列,它显示了数据,但我试图再添加一列,但它没有显示预期的结果

我还想将列重新排列为:

UserName AprilAmount_2012 April_2012 MayAmt_2012  May_2012   JuneAmt_2012    June_2012
bbb      NULL              NULL           NULL       NULL          NULL         NULL
bbb      NULL              NULL           NULL       NULL          300          3
ccc      NULL              4              NULL       NULL          600          NULL
ccc      500               NULL           NULL       NULL          NULL         5
我还希望显示唯一的名称

请帮帮我或告诉我怎么走,这样我才能找到解决办法


非常感谢您的帮助。

添加PRINT@sql以查看并调试生成的脚本。@AndriyM:感谢您给我的时间,我使用了您建议的PRINT语句,然后我得到了如下查询:使用u作为选择用户名,DateNamemonth,Visited_Date+''''+CastYearVisited_Date作为VARCHAR4作为VisitedMonth,DateNamemonth,访问日期+'''''''+CastYearVisited\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\因为我没有弄清楚error@AndriyM:你能给我举个例子,我们可以使用两个或更多的支点,这样我就可以对它有更多的了解,并能够解决我的问题。实际上,在遇到你的帖子之前,我从未见过使用双枢轴的查询。如果我要继承其他人的非工作脚本(如您的),我会尝试按照我的建议执行,即打印生成的脚本并对其进行调试。通过在本例中进行调试,我了解了在ManagementStudio的查询窗口中运行此脚本和/或其部分。在这一点上,我很难提出更具体的建议,因为我没有数据来尝试您的脚本。您可能应该首先尝试提出一个静态查询,即具有两个枢轴的普通查询。如果你不太熟悉支点,那么你应该更早开始,用一个支点。一旦那个阶段对您来说是明确的,就转到下一个阶段:两个枢轴,然后是带枢轴的动态脚本,然后是带两个枢轴的动态脚本。这似乎是一条艰难的道路,对此我很抱歉,但如果你缺乏必要的知识,你需要获得它。如果不是通过尝试和错误,还有什么更好的方法来获得它呢?
UserName AprilAmount_2012 April_2012 MayAmt_2012  May_2012   JuneAmt_2012    June_2012
bbb      NULL              NULL           NULL       NULL          NULL         NULL
bbb      NULL              NULL           NULL       NULL          300          3
ccc      NULL              4              NULL       NULL          600          NULL
ccc      500               NULL           NULL       NULL          NULL         5