SQL Server 2005 동적 피벗
SQL Server 2005에서는 알 수 없는 열 수를 사용한 피벗 작업이 까다로울 수 있습니다. 이 기사에서는 이러한 문제에 대한 해결책을 살펴봅니다.
질문:
SQL Server 2005에서 알 수 없는 수의 열이 있는 데이터를 동적으로 피벗하는 방법은 무엇입니까? 원하는 출력은 고유한 학생을 행으로, 과제를 나타내는 동적 열로 마감일별로 정렬한 테이블과 유사해야 합니다. 가능하다면 "총계" 열이 마지막에 나타나야 합니다.
정답:
SQL Server 2005의 제한으로 인해 동적 피벗을 구현하려면 동적 SQL을 사용해야 할 수도 있습니다. 가능한 솔루션 중 하나는 DMV(동적 관리 뷰)와 XML을 활용하여 동적 SQL 문을 생성하는 것입니다.
<code class="language-sql">DECLARE @DynamicSQL NVARCHAR(MAX) = N''; -- 从表中获取不同的作业名称 SELECT DISTINCT AssignmentName INTO #AssignmentNames FROM TableName; -- 循环遍历作业名称 SELECT @DynamicSQL = @DynamicSQL + ' MAX(CASE WHEN AssignmentName = ''' + AssignmentName + ''' THEN Grade END) AS ' + AssignmentName + ',' FROM #AssignmentNames; -- 删除动态 SQL 语句末尾的逗号 SET @DynamicSQL = LEFT(@DynamicSQL, LEN(@DynamicSQL) - 1); -- 构造用于透视的最终动态 SQL 语句 SET @DynamicSQL = 'SELECT StudentName, ' + @DynamicSQL + ' FROM TableName GROUP BY StudentName;'; -- 执行动态 SQL 语句 EXEC sp_executesql @DynamicSQL;</code>
이 방법은 테이블에 식별된 다양한 작업 이름을 기반으로 피벗하는 데 필요한 열이 포함된 동적 SQL 문을 생성합니다.
참고:
이 솔루션에는 동적 SQL이 포함되어 있지만 SQL 문은 알려지고 신뢰할 수 있는 데이터로 구성되므로 주입 공격에 취약하지 않습니다. 또는 데이터가 자주 변경되는 경우 코드 생성을 구현하여 필요한 SQL 문으로 저장 프로시저를 만드는 것을 고려하세요.
위 내용은 SQL Server 2005에서 알 수 없는 열이 있는 데이터를 동적으로 피벗하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!