> 데이터 베이스 > MySQL 튜토리얼 > SQL Server의 테스트 유형에 따라 여러 행을 하나의 행으로 동적으로 병합하는 방법은 무엇입니까?

SQL Server의 테스트 유형에 따라 여러 행을 하나의 행으로 동적으로 병합하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2025-01-22 01:08:37
원래의
848명이 탐색했습니다.

How to Dynamically Merge Multiple Rows into One Row Based on Test Type in SQL Server?

테스트 유형에 따라 여러 행을 하나의 행으로 동적으로 병합(SQL Server)

질문:

Result, WorkOrderTestType 열이 있는 Result이라는 테이블이 있습니다. TestType 열을 기준으로 그룹화하고 동일한 TestType이 포함된 여러 행을 하나의 행으로 병합하려고 합니다. 그러나 각 TestType에 대해 얼마나 많은 Result 열이 있는지 알 수 없습니다.

해결책:

이 문제를 해결하기 위해 동적 SQL을 사용할 수 있습니다. 다음 쿼리는 최대 100개의 결과에 대해 작동합니다. 결과가 100개가 넘는 경우 CTE Tally의 N에 CROSS JOIN를 더 추가할 수 있습니다.

DECLARE @SQL nvarchar(MAX),
        @CRLF nchar(2) = NCHAR(13) + NCHAR(10),
        @MaxTally int;

SELECT @MaxTally = MAX(C)
FROM (SELECT COUNT(*) AS C
      FROM dbo.Result
      GROUP BY WorkOrder,
               TestType) R;

WITH N AS(
    SELECT N
    FROM (VALUES(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL))N(N)),
Tally AS(
    SELECT TOP (@MaxTally) ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS I
    FROM N N1, N N2) --100 行,更多行需要添加更多 N
SELECT @SQL = N'WITH RNs AS(' + @CRLF +
              N'    SELECT WorkOrder,' + @CRLF +
              N'           TestType,' + @CRLF +
              N'           Result,' + @CRLF +
              N'           ROW_NUMBER() OVER (PARTITION BY WorkOrder, TestType ORDER BY (SELECT NULL)) AS RN --ORDER BY 应为您的 ID/始终递增列' + @CRLF +
              N'    FROM dbo.Result)' + @CRLF +
              N'SELECT WorkOrder,' + @CRLF +
              N'       TestType,' + @CRLF +
              --由于不知道 SQL Server 版本,因此使用 FOR XML PATH
              STUFF((SELECT N',' + @CRLF +
                            CONCAT(N'       MAX(CASE RN WHEN ',T.I,N' THEN Result END) AS Result',T.I)
                     FROM Tally T
                     ORDER BY T.I ASC
                     FOR XML PATH(N''),TYPE).value('(./text())[1]','nvarchar(MAX)'),1,3,N'') + @CRLF +
              N'FROM RNs R' + @CRLF +
              N'GROUP BY WorkOrder,' + @CRLF +
              N'         TestType;';

PRINT @SQL; --您的好帮手。

EXEC sys.sp_executesql @SQL;
로그인 후 복사

위 내용은 SQL Server의 테스트 유형에 따라 여러 행을 하나의 행으로 동적으로 병합하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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