表格 DATA_TABLE
在同一列中有2个不同的数字数据 - Engine_Technical
该表格有一个单独的列 - Engine_Technical_Type
- 标识
数据 Engine_Technical
的类型 - " CO2排放" 或" MPG"
该表还有一列 - TECH_Id
- 这不是唯一的,并且特定于车辆。
我希望能够制作一个过滤行的查询,这些查询不会与2个单独的输入条件值匹配。
例如:
我想找到 MPG 小于 25 和排放 =的车辆,让我们说 17
当我过滤的数据在同一列中时,我只是不确定如何使用两者返回行。
两个单独的查询工作
/ *表示MPG * /
SELECT * FROM `DATA_TABLE`
WHERE `TECH_Id` = 111
AND `Engine_Technical_Type` = "MPG"
AND `Engine_Technical` < 25
/ *表示CO2 * /
SELECT * FROM `DATA_TABLE`
WHERE `TECH_Id` = 111
AND `Engine_Technical_Type` = "CO2 EMISSIONS"
AND `Engine_Technical` = 17
|DATA_TABLE|
| TECH_Id | Engine_Technical_Type | Engine_Technical |
------------------------------------------------------
| 111 | CO2 EMISSIONS | 15 |
------------------------------------------------------
| 111 | CO2 EMISSIONS | 17 |
------------------------------------------------------
| 111 | MPG | 15 |
------------------------------------------------------
| 111 | CO2 EMISSIONS | 15 |
------------------------------------------------------
| 111 | MPG | 35 |
------------------------------------------------------
| 111 | CO2 EMISSIONS | 15 |
------------------------------------------------------
| 999 | MPG | 10 |
------------------------------------------------------
| 999 | CO2 EMISSIONS | 17 |
------------------------------------------------------
期望的结果:
|VEHICLE|
|ID|| TECH_Id | CO2 EMISSIONS | MPG |
----------------------------------------------------------
1 | 111 | 17 | 15 |
----------------------------------------------------------
我只需要在一个查询中执行此操作,并将MPG和CO2排放在一个单独的列中。 任何帮助,将不胜感激。 谢谢。
答案 0 :(得分:1)
考虑使用case
:
select id, tech_id
, sum(case engine_technical_type
when 'CO2 EMISSIONS' then engine_technical
end) as co2_emissions
, sum(case engine_technical_type
when 'MPG' then engine_technical
end) as mpg
from data_table
group by id
答案 1 :(得分:1)
SELECT tech_id,
MAX(CASE WHEN Engine_Technical_Type = 'MPG' THEN Engine_Technical END) as mpg,
MAX(CASE WHEN Engine_Technical_Type = 'CO2 EMISSIONS' THEN Engine_Technical END) as co2_emissions
FROM `DATA_TABLE`
WHERE `TECH_Id` = 111 AND
((Engine_Technical_Type = 'MPG' AND Engine_Technical < 25) OR
(Engine_Technical_Type` = 'CO2 EMISSIONS' AND `Engine_Technical` = 17)
)
GROUP BY tech_id;
我不确定id
应该是什么。