TSQL: получение значения, когда набор значений в одной таблице совпадает с набором значений в другой - PullRequest
1 голос
/ 16 декабря 2009

Настройка: заказ имеет несколько образцов, причем каждый образец имеет тест. Конкретная комбинация тестов - это определенный код теста. Как сопоставить набор строк с конкретными значениями с другой таблицей определенных значений, чтобы получить один результат?

Таблица: 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, но не могу найти способ сравнить набор значений в одной таблице с набором значений в другой таблице.

Ответы [ 2 ]

1 голос
/ 16 декабря 2009

Я считаю, что вам нужно:

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.

0 голосов
/ 16 декабря 2009

ВЫБЕРИТЕ o.order, t.testcode из заказа o присоединиться к тестовым кодам t на o.test = t.test

Он будет возвращать только один за каждый, если он действительно есть, чего в этом случае у вас нет.

Таким образом, вам придется добавить в предложение WHERE, например, чтобы ограничить выборки или ограничить каким-либо другим способом, который определяет уникальный набор для заказа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...