У меня есть таблица с 67 столбцами и около 36 000 строк, мне нужно запустить SELECT на основе двух из этих столбцов.Выберите данные в одной таблице с 1: Многие отношения
Важными столбцами являются FINANCIAL_ACCOUNT_ID, EVENT_DESCRIPTION.
FINANCIAL_ACCOUNT_ID - уникальный номер для каждой учетной записи, но не может быть уникальным в таблице. Описание события не уникально. Описание события может содержать «Событие 1» «Событие 2» «Событие 3» и т. Д.
Так таблица может выглядеть следующим образом:
TABLE
+----------------------+-------------------+-------------+
| FINANCIAL_ACCOUNT_ID | EVENT_DESCRIPTION | OTHER_STUFF |
+----------------------+-------------------+-------------+
| 1121 | Event 1 | n/a |
| 107401 | Event 2 | n/a |
| 256483 | Event 1 | n/a |
| 1121 | Event 3 | n/a |
| 107401 | Event 1 | n/a |
| 363586 | Event 1 | n/a |
| 546875 | Event 1 | n/a |
| 546875 | Event 2 | n/a |
+----------------------+-------------------+-------------+
RESULT
+----------------------+-------------------+-------------+
| FINANCIAL_ACCOUNT_ID | EVENT_DESCRIPTION | OTHER_STUFF |
+----------------------+-------------------+-------------+
| 107401 | Event 2 | n/a |
| 107401 | Event 1 | n/a |
| 546875 | Event 1 | n/a |
| 546875 | Event 2 | n/a |
+----------------------+-------------------+-------------+
Что мне нужно, чтобы получить Возвращается вся строка, если есть счет финансовых ID с ОБА «Событием 1» и «Event 2».
Я попытался с оговорками в сочетании с внутренними объединениями ... В своей последней попытке, я добавил COUNT (financial_account_id), такие как:
select FINANCIAL_ACCOUNT_ID, EVENT_DESCRIPTION, COUNT(FINANCIAL_ACCOUNT_ID)
FROM master
group by FINANCIAL_ACCOUNT_ID
HAVING COUNT(FINANCIAL_ACCOUNT_ID) >1;
Однако вот результаты я в видя, с этого выберите заявление: (. Я говорю, что нужно всю строку, но как только я получаю правильные результаты вернулся, я могу отфильтровать лишние столбцы мне не нужны)
Financial_Account_ID | Event_Description | COUNT(Financial_Account_ID)
107401 | Event 2 | 2
546875 | Event 1 | 2
Любойпомощь в том, как должен выглядеть SQL-запрос вроде этого? Деталь: MariaDB 10, имя_базы_данное: JuneEvents, имя таблицы: мастер Я также получила копию в MS-SQL 2012 Express, дб
EDIT: - Простите @ Тим за что, мне нужно, чтобы соответствовать каждой учетной записи для как событие «1», так и событие «событие 2» 3 и любые другие, которые могут существовать. Проясняет?
РЕШЕНИЕ: Я использовал второй запрос @ Gordon с JOIN в качестве точки спрыгивания и получил окончательный запрос, который выглядел следующим образом: (обратите внимание: теперь есть дополнительные поля, но я добавил их после начального запрос возвратил результаты Проппер из начального набора данных.)
SELECT t.financial_account_id, t.event_description, t.sold_quantity, t.paid_amount
FROM master t JOIN
(SELECT financial_account_id
FROM master t
WHERE event_description IN ('Event 1', 'Event 2')
GROUP BY financial_account_id
HAVING COUNT(DISTINCT event_description) = 2
) tt
ON tt.financial_account_id = t.financial_account_id
WHERE (event_description IN ('Event 1', 'Event 2') AND (sold_quantity > 0));
Вы никогда не давал нам логику для определения _which_ ' Event_Description' для возврата в конечном результате. –
«GROUP BY» очень мощный, но так используется столбец datetime, чтобы помочь вам отличить результаты. В зависимости от того, как Event_1 и Event_2 разделены (могут ли они произойти одновременно? Возможны ли значения NULL?), Возможно, вам придется использовать подзапрос. Очевидно, нам нужна более подробная информация о бизнес-логике и правилах. –
@RCMaples, так вы говорите, что хотите совместить учетную запись с событиями 1 и 2, а также только события 1 и 2? –