Пересечение столбцов

#sql #plsql

#sql #plsql

Вопрос:

Предположим, у меня есть таблица, подобная

 ID     PROD     UNIT
1    |  100  | X
2   |  100   |  Y
3   |  100   |  Z
4   |  200   |  X
5   |  200   |  Y
6   |  300   |  Y
7   |  300   |  Z
  

Я хочу получить пересечение значений из столбца UNIT для каждого кода из столбца PROD с помощью SQL-запроса. Количество продуктов в таблице является переменным, но мне нужно пересечь ЕДИНИЦУ для всех продуктов.
В моем примере результирующей таблицей будет таблица с одной строкой, поскольку все продукты из PROD имеют только одну общую единицу:

 PROD    UNIT
300     Y
  

Комментарии:

1. Вы вообще что-нибудь пробовали? Что, по вашему мнению, не работает?

2. @dfundako Я попробовал несколько выборок на основе count (*) … но я пришел к выводу, что использование count / группировка по единицам совсем не поможет в этом problem…so на данный момент я понятия не имею, с чего начать

3. Вы говорите, что ваш результирующий набор должен иметь только Y в качестве единицы измерения, потому что это единственное, что общего у всех PROD. Но почему в вашем результирующем наборе есть только один PROD? Каково требование, для которого будет отображаться значение?

4. Зачем вам хранимая процедура?

5. simple-talk.com/sql/t-sql-programming/…

Ответ №1:

 SELECT MAX(PROD) as Prod, Unit
FROM
    TableName
GROUP BY
    Unit
HAVING
    COUNT(DISTINCT PROD) = (SELECT COUNT(DISTINCT PROD) FROM TableName)
  

Вы должны иметь возможность сравнивать DISTINCT Count of Products grouped by Unit с DISTINCT Count of All Products in the table . Для этого вы можете использовать вложенный запрос в HAVING предложении.

Я предположил, что вы хотите Maximum PROD Id , основываясь на вашем результате, если вы хотите что-то еще, если вы хотите, чтобы все записи просто использовали это как производную таблицу и присоединялись обратно, чтобы получить желаемые результаты.