SQL查询确定多于1个特化并在表中显示

时间:2016-03-29 17:09:35

标签: sql oracle

我正在使用Oracle进行数据库个人学习。根据我目前的知识,我无法解决这个问题......在这里,我将展示我的问题。

这是我的2表结构:

CREATE table "HOSPITAL" (
    "HOSPITAL_ID"   NUMBER NOT NULL,  
    "NAME"          VARCHAR2(255),  
    "ADDRESS"       VARCHAR2(255),  
    "BED_CAPACITY"  NUMBER,  
    "CONTACT"       NUMBER,  
    "EMAIL"         VARCHAR2(255),  
    "PAYMENT-SCALE" VARCHAR2(255),  
    constraint  "HOSPITAL_PK" primary key ("HOSPITAL_ID")
);  

CREATE table "HOSPITAL_SPECIALIZE" (  
    "HOSPITAL_ID" NUMBER NOT NULL,    
    "MATERINITY"  VARCHAR2(255),    
    "ENT"         VARCHAR2(255),  
    "DERMATOLOGY" VARCHAR2(255),  
    "ORTHOPEDICS" VARCHAR2(255),  
    constraint  "HOSPITAL_SPECIALIZE_PK" primary key ("HOSPITAL_ID")
);

-----这是我桌子里面的数据----- enter image description here

这是一些医院专业领域,意味着该医院专注于该特定领域。 enter image description here

我应该如何编写一个自动检测的SQL,并且只列出医院专门针对1个以上的区域。

这是我希望获得的输出:
enter image description here

这可能在SQL中执行,或者我的表结构可能是错误的吗?

感谢您阅读我的问题,并对我糟糕的解释感到抱歉。

3 个答案:

答案 0 :(得分:2)

我看不到这么简单的方法。

所以繁琐的方式是

SELECT *
FROM "HOSPITAL"  H
JOIN "HOSPITAL_SPECIALIZE" HS
  ON  H."HOSPITAL_ID" = HS."HOSPITAL_ID"
WHERE DECODE("MATERINITY", 'YES', 1, 0) +
      DECODE("ENT", 'YES', 1, 0) +
      DECODE("DERMATOLOGY", 'YES', 1, 0) +
      DECODE("ORTHOPEDICS", 'YES', 1, 0) >= 2

答案 1 :(得分:1)

尝试:

SELECT
    a.HOSPITAL_ID, a.NAME, b.MATERNITY, b.ENT, b.DERMATOLOGY, b.ORTHOPEDICS
FROM
    HOSPITAL AS a
    JOIN
    HOSPITAL_SPECIALIZE AS b ON a.HOSPITAL_ID = b.HOSPITAL_ID
WHERE
    CASE MATERNITY WHEN 'YES' THEN 1 ELSE 0 END
    +
    CASE ENT WHEN 'YES' THEN 1 ELSE 0 END
    +
    CASE DERMATOLOGY WHEN 'YES' THEN 1 ELSE 0 END
    +
    CASE ORTHOPEDICS WHEN 'YES' THEN 1 ELSE 0 END > 1

答案 2 :(得分:1)

你可以通过取消旋转表来实现这一点,但也许你还没有进入你的学习领域。标记此示例(将其保存在某处)并在您了解旋转和取消旋转时返回它。

这是一个非常好的学习机会。正如您所看到的,编写一个相对简单的查询(如您请求的查询)似乎并不容易。在许多情况下,这应该表明可能有更好的数据库设计。在这种情况下,您可能最好还有额外的桌子,仅用于医疗专业。然后,您的“hospital_specialize”表将只有两列,用于医院和专业,以及一对(医院,专业),仅用于当前设计中的“是”值。然后查询会更简单 - 并考虑当业内人士认可更多专业时会发生什么。您只需要在“特殊”表中添加一个或多个值,而不必更改表以添加一个或多个列。

然后,您展示的格式的报告将通过旋转获得!