> 데이터 베이스 > MySQL 튜토리얼 > SQL Server에서 피벗 열을 동적으로 생성하는 방법은 무엇입니까?

SQL Server에서 피벗 열을 동적으로 생성하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2025-01-07 18:47:41
원래의
544명이 탐색했습니다.

How to Dynamically Generate Pivot Columns in SQL Server?

SQL Server의 동적 피벗 열

SQL Server에서 동적 피벗 열을 사용하면 다른 테이블의 값에 따라 열이 변경되는 피벗 테이블을 만들 수 있습니다. 이는 피벗 열의 개수를 미리 알 수 없거나 자주 변경되는 경우에 유용합니다.

다음 형식을 고려하세요.

  • 속성: 속성 목록이 포함되어 있습니다.
  • PropertyObjects: 속성을 ​​개체에 연결하고 속성에 대한 값을 제공합니다.

문제 설명

속성 테이블의 각 속성에 대해 하나의 열을 포함하는 피벗 테이블을 생성하려고 합니다. 그러나 속성의 개수는 변경될 수 있으므로 열 이름을 동적으로 가져오는 방법이 필요합니다.

솔루션

동적 피벗 열을 생성하려면 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>
로그인 후 복사

결과

동적 쿼리는 속성 테이블의 각 속성에 대해 하나의 열을 포함하는 피벗 테이블을 반환합니다. 피벗 테이블의 값은 각 속성-객체 조합의 최대값이 됩니다.

예를 들어 속성 테이블에 다음 속성이 포함된 경우:

  • 속성1
  • 속성2
  • 속성3

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿