私は 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
ご注意ください。ヘッダーの金額は
今私の問題は次のとおりです。
テーブル内の 3 つの列についてはデータが表示されますが、訪問した列をもう 1 つ追加しようとすると、期待される結果が表示されません....
また、列を次のように再配置したいと思います。
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
ユニークな名前も表示したい...
解決策を見つけることができるように、私を助けてください。または方法を教えてください。
どんな種類の助けも大歓迎です。