>我有一个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个人是一对夫妇,夫妻。我需要将它们分组为"夫妇"。最后两个人是父亲和孩子,所以他们需要被归类为"爸爸-孩子"。下一个分组是上述每个分组的计数,其中 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 字段的两个表上必须有一个联接,但我不确定如何按"家庭"、"夫妇"、"爸爸-孩子"类别分组,然后根据标志计算数字是真还是假。我感谢任何和所有的帮助!
这应该可以解决问题,当然,如果我正确理解您的问题
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
查看您的数据并根据您的解释,您可以使用一些聚合函数检索所需的值 (假设 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