【问题标题】:How can I get just one result? SQL: CASE Returns two rows我怎样才能得到一个结果? SQL: CASE 返回两行
【发布时间】:2021-03-22 14:24:38
【问题描述】:

我有两个用于汽车信息的表格,用于确定他们拥有哪种类型的发动机。因此,我需要第二张表,其中列出了汽车的所有特殊设备。表 1 区分了电池和无电池。使用表 2 中的特殊设备的钥匙,可以识别“无电池”汽车是混合动力汽车还是内燃机汽车。如果他们有特殊设备“ABC”钥匙,他们就是混合动力汽车。如果不是,它们就是燃烧车。

表 1:

> ID    |Car    |Engine      |
> 1     |RED    |BATTERY     |  
> 2     |YELLOW |NO-BATTERY  |
> 3     |BLUE   |NO-BATTERY  |  

表 2:

-ID-|SPECIAL EQUIPMENT
1   |AAA
1   |BBB
1   |CCC
2   |ABC
2   |BBB
2   |CCC
3   |ABC
3   |BBB
3   |CCC

SQL 查询是:

SELECT DISTINCT    mytable.id, mytable.car, mytable.engine
FROM
    (SELECT table1.id, table1.car, table1.engine, table1.type,
    
    CASE    WHEN table1.type = 'Battery'    THEN 'BEV'
            WHEN table1.type = 'No-Battery'     THEN (CASE   WHEN special Equipment = 'ABC' THEN 'HYBRID' 
                                                      ELSE 'COMBUSTION' END)                                               
    END AS engine
    
    FROM table1
    INNER JOIN table 2 key ON table1.id = table2.id  
    WHERE (cars.id = 2 )  
)t;

CAR ID 2 的 SQL 代码返回 --> 2 列,一次是混合动力发动机类型,另一次是燃烧发动机类型。

结果(当前):

> ID    |Car    |type        |engine
> 2     |YELLOW |NO-BATTERY  |HYBRID    
> 2     |YELLOW |NO- BATTERY |COMBUSTION

我想展示:

> ID    |Car    |type        |engine
> 2     |YELLOW |NO-BATTERY  |HYBRID    

Combustion 的结果是错误的,但是显示出来了……我怎样才能得到一个正确的回报?

【问题讨论】:

标签: sql oracle case oracle-sqldeveloper


【解决方案1】:

我认为问题在于你要求

SELECT DISTINCT    mytable.id, mytable.car, mytable.engine

当您只想显示不同的 mytable.car 时

在结果中有两个不同的 mytable.engine 显示,因为它们是不同的。

SELECT DISTINCT    mytable.car

我对 JQL 了解不多

【讨论】:

    【解决方案2】:

    我想你只是想要exists:

    select t1.*,
           (case when exists (select 1
                              from table2 t2
                              where t2.id = t1.id and t2.special = 'ABC'
                             )
                 then 'Hybrid' else 'Combustion'
            end) as engine
    from table1 t1;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多