SQL Server에서 일부 데이터를 처리하고 약간의 품질 보증을 수행하고 '응답'을 얻고 싶습니다.그룹화 된 비 등가 열/행을 검사하는 SQL Server
표는 테스트를 나타내며 테스트에서 100 % 일치를 제공하지 않으면 중복으로 실행되었습니다. 이 테이블은 다음 코드가 적용 가능하고 이들이 우선 순위의 오름차순으로되어있어서
: 1) -99 시험 2를 생략 하였다)이 00 시험 100 % 일치 3 아니었다) 뭐든지> 00 (100 % 일치 예 : 01, 02, 01-01 etc.)이렇게해야 할 일이 두 가지 있습니다.
먼저 각 SampleID에 대해 01> 00> -99 을 선택해야합니다. 둘째, 테스트에 100 % 일치 (예 : # 3)가 있었는지 테스트에 동의하지 않아야합니다. 예를 들어 Run2 = 01과 Run3 = 02 인 11-0010-P1입니다 (아래).
나는 다음 코드로 처음 부분을 얻었지만, ROWNUMBER() 부분의 MAXIMUM을 얻을 수 없습니다. 질문.
정말 두 번째 부분에 붙어 있습니다.
모든 도움을 주시면 감사하겠습니다.
DECLARE @TempTable TABLE (SampleID varchar(10), TestRun int, TestResult varchar(max))
INSERT INTO @TempTable VALUES('11-0003-P1', 1,'-99')
INSERT INTO @TempTable VALUES('11-0004-P1', 1, '00')
INSERT INTO @TempTable VALUES('11-0005-P1', 1, '01')
INSERT INTO @TempTable VALUES('11-0007-P1', 1,'-99')
INSERT INTO @TempTable VALUES('11-0007-P1', 2, '00')
INSERT INTO @TempTable VALUES('11-0007-P1', 3, '00')
INSERT INTO @TempTable VALUES('11-0008-P1', 1,'-99')
INSERT INTO @TempTable VALUES('11-0008-P1', 2, '02')
INSERT INTO @TempTable VALUES('11-0008-P1', 3, '02')
INSERT INTO @TempTable VALUES('11-0009-P1', 1, '00')
INSERT INTO @TempTable VALUES('11-0009-P1', 2, '07')
INSERT INTO @TempTable VALUES('11-0009-P1', 3, '07')
INSERT INTO @TempTable VALUES('11-0010-P1', 1, '00')
INSERT INTO @TempTable VALUES('11-0010-P1', 2, '01')
INSERT INTO @TempTable VALUES('11-0010-P1', 3, '02')
SELECT SampleID, TestRun, TestResult,
ROW_NUMBER() OVER (PARTITION BY SampleID
ORDER BY
CASE TestResult
WHEN '-99' THEN 1
WHEN '00' THEN 2
ELSE 3
END
) AS RowNumber
FROM @TempTable
ORDER BY SampleID, TestRun
결과는 다음과 같이해야합니다 :
SampleID TestResult
11-0003-P1 -99
11-0004-P1 00
11-0005-P1 01
11-0007-P1 00
11-0008-P1 02
11-0009-P1 07
11-0010-P1 Err 01:02
** 그것은 것 실제로 (11-0010-P1에 대한 예 1시 2분) 충돌하는 값을 줄 적합하지만 완전히 필요한 경우 오류 플래그는 정상입니다.
+1. . . 그건 그렇고 좋은 질문입니다. 테스트 할 예제 데이터와 스크립트를 제공합니다! –