#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. Зачем вам хранимая процедура?
Ответ №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
, основываясь на вашем результате, если вы хотите что-то еще, если вы хотите, чтобы все записи просто использовали это как производную таблицу и присоединялись обратно, чтобы получить желаемые результаты.