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 つの列についてはデータが表示されますが、訪問した列をもう 1 つ追加しようとすると、期待される結果が表示されません....

  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