SQL Server での行の列への転置
SQL Server では、さまざまな方法で行を列に転置できます。カーソルを利用して行を読み取り、列を設定する以外にも、この変換には別のアプローチが存在します。
効果的な方法の 1 つは、条件付き集計です。 CASE ステートメントで MAX() 関数を利用すると、次のクエリに示すように、タグ ID に基づいて特定の列に値を割り当てることができます。
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
または、NULL 値を許可してクエリを簡素化することもできます。 「n/a」の代わりに:
SELECT TimeSeconds, MAX(CASE WHEN TagID = 'A1' THEN Value END) A1, MAX(CASE WHEN TagID = 'A2' THEN Value END) A2, MAX(CASE WHEN TagID = 'A3' THEN Value END) A3, MAX(CASE WHEN TagID = 'A4' THEN Value END) A4 FROM table1 GROUP BY TimeSeconds
別の方法には 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
タグ ID 値が動的である場合、動的 SQL を使用して必要なクエリを生成できます。 STUFF() 関数と FOR XML PATH() 関数を利用すると、列リストを動的に構築し、PIVOT クエリで使用できます。
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 で行を列に転置する効率的な方法を提供します。タグ ID 値の可用性と性質に基づいて、さまざまなシナリオに対応するサーバー。
以上がSQL Server で行を列に転置するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。