Несколько групп и счетчик Oracle SQL - PullRequest
0 голосов
/ 16 мая 2018

У меня есть база данных Oracle 11g с двумя таблицами, из которых мне нужно извлекать, группировать и считать данные. Данные в таблицах:

Table 'ED'
|NAME | SSN       | IDG   | IDE | IDD | SPOUSE | CHILD |
========================================================
|John | 111111111 | 12345 | 123 | 0   | FALSE  | FALSE |
|Sue  | 111221111 | 12345 | 123 | 1   | TRUE   | FALSE |
|Joe  | 111331111 | 12345 | 123 | 2   | FALSE  | TRUE  |
|Sam  | 111441111 | 12345 | 321 | 0   | FALSE  | TRUE  |
|Jane | 111551111 | 12345 | 321 | 1   | TRUE   | FALSE |
|Jim  | 111661111 | 12345 | 555 | 0   | FALSE  | TRUE  |
|Zach | 111771111 | 12345 | 555 | 2   | FALSE  | TRUE  |

Table 'EL'
|IDG   | IDE | IDD | FLAG01 | FLAG02 | FLAG03 | FLAG04 |
========================================================
|12345 | 123 | 0   | TRUE   | FALSE  | TRUE   | TRUE   |
|12345 | 123 | 1   | TRUE   | FALSE  | FALSE  | FALSE  |
|12345 | 123 | 2   | TRUE   | TRUE   | TRUE   | TRUE   |
|12345 | 321 | 0   | TRUE   | FALSE  | TRUE   | TRUE   |
|12345 | 321 | 1   | TRUE   | FALSE  | FALSE  | FALSE  |
|12345 | 555 | 0   | TRUE   | FALSE  | TRUE   | TRUE   |
|12345 | 555 | 1   | TRUE   | FALSE  | FALSE  | FALSE  |

Итак, первые 3 человека - это семья, отец, супруг и ребенок. Мне нужно сосчитать их всех как группу "семья" под IDG = 12345 и IDE = 123. Следующие 2 человека - пара, муж и жена. Мне нужно сгруппировать их как "пару". Последние 2 человека - это отец и ребенок, поэтому их нужно сгруппировать как «папа-ребенок». Следующая группировка - это счетчик каждой из вышеперечисленных группировок, где FLAG01 = T, а затем отдельный счет, где FLAG02 - это истина, а FLAG03 - это истина, а FLAG04 - это истина. Таким образом, желаемый результат будет:

FLAG01=T:
Family: 3
Couple: 2
Dad-Child: 2

FLAG02=T:
Family: 1
Couple: 0
Dad-Child: 0

FLAG03=T:
Family: 2
Couple: 1
Dad-Child: 1

FLAG04=T:
Family: 2
Couple: 1
Dad-Child: 1

Я знаю, что должно быть соединение двух таблиц для полей IDG и IDE, но я не уверен, как группировать по категориям "семья", "пара", "папа-ребенок", а затем подсчитывать числа основанный на флагах, являющихся истинными или ложными. Я ценю любую помощь!

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

просматривая ваши данные и основываясь на вашем объяснении, вы можете получить нужное вам значение, используя некоторую функцию агрегирования (при условии, что TRUE и FALSE являются строковыми значениями, в противном случае удалите кавычки в запросе)

select IDG
  , IDE
  , count(*)
  , case when max(spouse) = 'TRUE' AND max(child) = 'FALSE' then 'Couple'
         when max(spouse) = 'TRUE' AND max(child) = 'TRUE' then 'Family'
         when max(spouse) = 'FALSE' AND max(child) = 'TRUE' AND count(*)>1 then dad-child
         END type_of_ralation
FROM ED
group by IDG , IDE
0 голосов
/ 16 мая 2018

Это должно сработать, конечно, если я правильно понял вашу проблему

SELECT COUNT(EL.FLAG01), COUNT(EL.FLAG02), COUNT(EL.FLAG03), COUNT(EL.FLAG04), ED.IDE 
FROM ED
INNER JOIN EL on ED.IDE=EL.IDE
GROUP BY ED.IDE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...