SQL Server에서 동적 피벗 열을 사용하면 다른 테이블의 값에 따라 열이 변경되는 피벗 테이블을 만들 수 있습니다. 이는 피벗 열의 개수를 미리 알 수 없거나 자주 변경되는 경우에 유용합니다.
다음 형식을 고려하세요.
속성 테이블의 각 속성에 대해 하나의 열을 포함하는 피벗 테이블을 생성하려고 합니다. 그러나 속성의 개수는 변경될 수 있으므로 열 이름을 동적으로 가져오는 방법이 필요합니다.
동적 피벗 열을 생성하려면 PIVOT 절과 함께 동적 SQL을 사용할 수 있습니다. 다음 코드는 한 가지 솔루션을 보여줍니다.
<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>
동적 쿼리는 속성 테이블의 각 속성에 대해 하나의 열을 포함하는 피벗 테이블을 반환합니다. 피벗 테이블의 값은 각 속성-객체 조합의 최대값이 됩니다.
예를 들어 속성 테이블에 다음 속성이 포함된 경우:
및 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!