-
は私にその上にいくつかの光を示してください。私は動的SQLを使用してこれを解決しました。
1.
次回のソースデータを作成してください、コピーが容易になり、あなたのデータと画像を追加しますが、それを入力しないでください。
CREATE TABLE DataSource (ID INT, Name VARCHAR(255), Details VARCHAR(255), Time_In VARCHAR(255), Time_Out VARCHAR(255), Value VARCHAR(255))
INSERT INTO DataSource VALUES
(1, 'a', 'string', DATEADD(HOUR, -1, GETDATE()), GETDATE(), '1'),
(1, 'b', 'string', DATEADD(HOUR, -1, GETDATE()), GETDATE(), '2'),
(1, 'c', 'string', DATEADD(HOUR, -1, GETDATE()), GETDATE(), '3'),
(2, 'b', 'string', DATEADD(HOUR, -1, GETDATE()), GETDATE(), '4'),
(3, 'a', 'string', DATEADD(HOUR, -1, GETDATE()), GETDATE(), '1'),
(3, 'b', 'string', DATEADD(HOUR, -1, GETDATE()), GETDATE(), '2'),
(3, 'c', 'string', DATEADD(HOUR, -1, GETDATE()), GETDATE(), '3'),
(3, 'd', 'string', DATEADD(HOUR, -1, GETDATE()), GETDATE(), '4'),
(4, 'b', 'string', DATEADD(HOUR, -1, GETDATE()), GETDATE(), '1'),
(4, 'd', 'string', DATEADD(HOUR, -1, GETDATE()), GETDATE(), '2')
2.手動であなたの最終的な結果のために考慮すべきであるカラムを追加@ColumnsPerName表で名前とcolumnNames
を取得します。
DECLARE @Names TABLE (Name VARCHAR(255))
INSERT INTO @Names SELECT DISTINCT Name FROM DataSource
DECLARE @ColumnsPerName TABLE (ColName VARCHAR(255))
INSERT INTO @ColumnsPerName VALUES ('Details'),('Time_In'),('Time_Out'),('Value')
3.ゲットピボットれる列名
CREATE TABLE #PivotColumns (Name VARCHAR(255), ColName VARCHAR(255), PivotHeader VARCHAR(255))
INSERT INTO #PivotColumns
SELECT Name, ColName, Name + ' ' + ColName FROM @Names CROSS JOIN @ColumnsPerName
4.ピボットテーブルソース
DECLARE @sql NVARCHAR(MAX)
SET @sql = ''
DECLARE @name VARCHAR(255), @colname VARCHAR(255), @pivotHeader VARCHAR(255)
DECLARE mCursor CURSOR FOR SELECT Name, ColName, PivotHeader FROM #PivotColumns
OPEN mCursor FETCH NEXT FROM mCursor
INTO @name, @colname, @pivotHeader
WHILE @@FETCH_STATUS = 0
BEGIN
SET @Sql += 'SELECT ID, ''' + @pivotHeader + ''' AS col, ' + @colname
+ ' AS val FROM DataSource WHERE Name = ''' + @name + ''' UNION ALL '
FETCH NEXT FROM mCursor INTO @name, @colname, @pivotHeader
END
CLOSE mCursor
DEALLOCATE mCursor
SET @Sql = LEFT(@Sql, LEN(@SQL) - 10) --remove last UNION ALL
CREATE TABLE #PivotSource (ID INT, PivotHeader VARCHAR(255), PivotValue VARCHAR(255))
INSERT INTO #PivotSource
EXEC sp_executesql @sql
5を作成
の結果取得
どのDBMSを使用しますか? –