SQL Server での行から列への転置
表形式データを操作する場合、行を列に転置すると便利な変換になることがあります。 SQL Server では、特定の要件に応じて、このタスクを達成するためのアプローチがいくつかあります。
条件付き集計
1 つの方法は、条件付き集計を使用することです。このアプローチは、列の数が事前にわかっている場合に適しています。ネストされた CASE ステートメントを使用すると、特定の条件に基づいて各列で取得する値を指定できます。以下のクエリは、条件付き集計を示しています。
SELECT TimeSeconds, COALESCE(MAX(CASE WHEN TagID = 'A1' THEN Value END), 'n/a') A1, COALESCE(MAX(CASE WHEN TagID = 'A2' THEN Value END), 'n/a') A2, COALESCE(MAX(CASE WHEN TagID = 'A3' THEN Value END), 'n/a') A3, COALESCE(MAX(CASE WHEN TagID = 'A4' THEN Value END), 'n/a') A4 FROM table1 GROUP BY TimeSeconds
PIVOT Operator
別のオプションは、PIVOT 演算子を使用することです。この演算子を使用すると、キー値に基づいて行を列に回転できます。次のクエリは、PIVOT を使用して行を転置します。
SELECT TimeSeconds, A1, A2, A3, A4 FROM ( SELECT TimeSeconds, TagID, Value FROM table1 ) s PIVOT ( MAX(Value) FOR TagID IN (A1, A2, A3, A4) ) p
動的 SQL
列の数が固定されていないか、動的に決定される場合は、動的 SQL を利用できます。 SQL。このアプローチには、使用可能な TagID 値に基づいて SQL クエリ文字列を構築し、それを動的に実行することが含まれます。以下のコードは例を示しています。
DECLARE @cols NVARCHAR(MAX), @sql NVARCHAR(MAX) SET @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(TagID) FROM Table1 ORDER BY 1 FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)'),1,1,'') SET @sql = 'SELECT TimeSeconds, ' + @cols + ' FROM ( SELECT TimeSeconds, TagID, Value FROM table1 ) s PIVOT ( MAX(Value) FOR TagID IN (' + @cols + ') ) p' EXECUTE(@sql)
これらの手法は、SQL Server で行を列に転置するさまざまな方法を提供します。最適なアプローチは、データの性質とタスクの特定の要件によって異なります。
以上がSQL Server で行を列に転置するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。