我想在 SQL SERVER 中处理一些数据,做一点 QA 并同时获得“答案”。
该表代表一个测试,如果测试没有给出 100% 匹配,则重复运行。
在此表中,以下代码适用,它们按优先级升序排列:1) -99 测试被跳过 2) 00 测试不是 100% 匹配 3) 任何 > 00 都是 100% 匹配(例如 01、02、01- 01等)
所以我需要做几件事。
首先,对于每个 SampleID,我需要选择 01 > 00 > -99 第二,我需要知道是否有任何测试有 100% 匹配(例如#3)并且测试不同意。一个例子是 11-0010-P1(下图),其中 Run2=01 和 Run3=02
我有点用以下代码获得了第一部分,但我无法获得查询的 ROWNUMBER() 部分的最大值。
我真的被困在第二部分了。
所有帮助将不胜感激!
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 的 01:02),但不是完全必要的,Err 标志就可以了。