设置:订单包含多个样本,每个样本都有一个测试。特定的测试组合是特定的测试代码。如何将具有特定值的一组行与另一个具有特定值的表匹配以提供单个结果?
表:TestCodes
ID TestCode Test 1 01a A 2 01b F 3 02a A 4 02a B 5 02b A 6 02b C 7 02c A 8 02c E 9 03a A 10 03a C 11 03a B 12 03a D 13 03b A 14 03b C 15 03b E 16 03c A 17 03c B 18 03c E 19 04 A 20 04 C 21 04 B 22 04 D 23 04 E
表:订单
Order Sample Test 1 1 A 1 2 B 1 3 C 1 4 D 1 5 E 2 1 A 2 2 E
我找不到返回的方法
Order TestCode 1 04 2 02c
我尝试过TSQL视图,但无法找到将一个表中的一组值与另一个表中的一组值进行比较的方法。
答案 0 :(得分:1)
我相信你需要:
SELECT o.OrderId, t.TestCode
FROM (
SELECT o.OrderId, t.TestCode, COUNT(*) AS intCount
FROM Orders o
INNER JOIN TestCodes t ON t.Test = o.Test
GROUP BY o.OrderId, t.TestCode
) AS ot
INNER JOIN (
SELECT OrderId, COUNT(*) AS intCount
FROM Orders
GROUP BY OrderId
) AS o ON o.OrderId = ot.OrderId
INNER JOIN (
SELECT TestCode, COUNT(*) AS intCount
FROM TestCodes
GROUP BY TestCode
) AS t ON ot.TestCode = t.TestCode
WHERE o.intCount = ot.intCount
AND t.intCount = ot.intCount
这会计算每个订单的匹配测试代码的数量,并确保此数字与该测试代码的测试数量和该订单的测试数量相匹配。
假设(TestCode,Test)对在TestCodes中是唯一的,并且(Order,Test)对在Orders中是唯一的。
答案 1 :(得分:0)
SELECT o.order,t.testcode 从订单o 在o.test = t.test
上加入测试代码如果实际上只有一个,它将只返回一个,但在这种情况下你没有。
因此,您必须添加一个WHERE子句,例如,以某种其他方式限制Samples或限制,以定义每个订单的唯一集合。