2016-08-05 57 views
1

我有一个表格,包含患者转诊(或旅行,不知道术语是什么)。转移可以在救护车上,或在汽车上,这取决于movil栏。 我必须按日期分组的转移次数和movil的类型。 想这是我的表:分组依据乘以我的行数

day movil 
1 M75 
1 M76 
1 M3 
2 M6 
2 M80 
3 M8 
3 M4 
3 M83 
3 M4 

MOVIL M71,M72,M75,M76,M77,M81,M82,M83是救护车,其余的都是车。 所以我想分开他们之间的汽车和救护车。

这里是我的查询:

select 
    case when movil in ('M71','M72','M75','M76','M77','M81','M82','M83') then 'AMBULANCE' 
    else 'CAR' END as tipo, 
    DAY(fecha) as day, 
    COUNT(*) as total 
from traslados 
where YEAR(fecha) = '2016' and MONTH(fecha) = '07' 
group by DAY(fecha),tipo 
order by DAY(fecha) 

所以我应该每天2行,相当于救护车之一,另一个相对应的汽车。但是,我每天得到4行。 我不明白为什么会发生这种情况。

+1

你可以发布结果的样子吗? –

+0

显示结果的一小部分... –

+0

我不知道如何显示结果,因为这些数据是虚构的。 –

回答

0

尝试使用

SELECT CASE 
     WHEN movil IN ('M71', 
         'M72', 
         'M75', 
         'M76', 
         'M77', 
         'M81', 
         'M82', 
         'M83') THEN 'AMBULANCE' 
     ELSE 'CAR' 
    END AS tipo, 
    DAY(fecha) AS DAY, 
    COUNT(*) AS total FROM traslados WHERE YEAR(fecha) = '2016' AND MONTH(fecha) = '07' GROUP BY DAY(fecha), 
    CASE 
     WHEN movil IN ('M71', 
         'M72', 
         'M75', 
         'M76', 
         'M77', 
         'M81', 
         'M82', 
         'M83') THEN 'AMBULANCE' 
     ELSE 'CAR' 
    END 
ORDER BY DAY(fecha) 
+0

令人难以置信,哇哇正是我在找什么。虽然我不明白它是如何工作的! –

+0

你不能在第 – Christian

+2

部分的群组中使用别名('tipo')呃,是的,你可以。 – Strawberry

0

在这样的情况下,我只是包装在另一个查询门分组,这省却了重复大量表达,更容易查询阅读并携带:

select * from (
    select 
    case when movil in ('M71','M72','M75','M76','M77','M81','M82','M83') then 'AMBULANCE' 
     else 'CAR'end as tipo, 
    DAY(fecha) as day 
    from traslados 
    where EXTRACT(YEAR_MONTH from fecha) = '201607') x 
group by day, tipo 
order by day 

还请注意使用EXTRACT在一个表达式中指定年份和月份。