1

我是 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 回答 0