SQL Server では、動的ピボット列を使用して、別のテーブルの値に基づいて列が変更されるピボット テーブルを作成できます。これは、ピボット列の数が事前に不明な場合、または頻繁に変更される場合に便利です。
次の形式を考えてみましょう:
プロパティ テーブルのプロパティごとに 1 つの列を含むピボット テーブルを作成したいと考えています。ただし、プロパティの数は変化する可能性があるため、列名を動的に取得する方法が必要です。
動的ピボット列を作成するには、PIVOT 句を指定した動的 SQL を使用できます。次のコードは 1 つの解決策を示しています:
<code class="language-sql">DECLARE @cols AS NVARCHAR(MAX); DECLARE @query AS NVARCHAR(MAX); -- 获取作为逗号分隔字符串的唯一属性名称 SELECT @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(Name) FROM property FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)'), 1, 1, ''); -- 构造动态查询 SET @query = 'SELECT * FROM ( SELECT o.object_id, p.Name, o.value FROM PropertyObjects AS o INNER JOIN property AS p ON o.Property_Id = p.Id ) AS t PIVOT ( MAX(value) FOR Name IN (' + @cols + ') ) AS p;'; -- 执行动态查询 EXEC(@query);</code>
動的クエリは、Property テーブル内のプロパティごとに 1 つの列を含むピボット テーブルを返します。ピボット テーブルの値は、各属性とオブジェクトの組み合わせの最大値になります。
たとえば、Property テーブルに次のプロパティが含まれている場合:
およびPropertyObjectsテーブルには次のデータが含まれています:
OBJECT_ID | PROPERTY_ID | VALUE |
---|---|---|
1 | 1 | ee |
1 | 2 | fd |
1 | 3 | fdf |
1 | 4 | ewre |
2 | 1 | dsd |
2 | 2 | sss |
2 | 3 | dfew |
2 | 4 | dff |
動的クエリは次のピボット テーブルを返します:
OBJECT_ID | PROPERTY1 | PROPERTY2 | PROPERTY3 | PROPERTY4 |
---|---|---|---|---|
1 | ee | fd | fdf | ewre |
2 | dsd | sss | dfew | dff |
以上がSQL Server でピボット列を動的に生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。