数据透视表不显示SQL Server中的数据

时间:2012-07-11 11:32:23

标签: 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

我搜索了很多,发现了一些有用的东西:

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)

,此查询的结果是:

UserName AprilAmount_2012  MayAmt_2012 JuneAmt_2012 April_2012  May_2012    June_2012
bbb      NULL              NULL         NULL        NULL           NULL      NULL
bbb      NULL              NULL         300         NULL           NULL      NULL
ccc      NULL              NULL         600         NULL           NULL      NULL
ccc      500               NULL         NULL        NULL           NULL      NULL

请注意,是的。标题中的金额为金额

现在我的问题是:

  1. 对于表格中的3列,它显示了数据,但我尝试添加一个访问的列,然后它没有显示预期的结果....

  2. 我还想将列重新排列为:

    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
    
  3. 我还希望显示唯一的名称......

  4. 请帮助我或告诉我如何找到解决方案。

    感谢任何形式的帮助。

0 个答案:

没有答案