2016-08-05 25 views
1

Ich habe eine Tabelle mit Transfers (oder Reisen, weiß nicht, was ist der Begriff) von Patienten. Der Transfer kann im Krankenwagen oder im Auto sein, es hängt von der Spalte movil ab. Ich muss die Anzahl der Transfers gruppiert nach Tag und Typ von movil. Angenommen dies ist meine Tabelle:Gruppe mit multipliziert meine Anzahl von Zeilen

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 sind Krankenwagen, der Rest sind Autos. Also ich möchte sie zwischen Autos und Krankenwagen trennen.

Hier ist meine Frage:

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) 

Also sollte ich pro Tag 2 Reihen haben, eine an die Ambulanzen entspricht, und eine andere, entsprechend den Autos. Allerdings bekomme ich 4 Zeilen pro Tag. Ich verstehe nicht, warum das passiert.

+1

Können Sie die Ergebnisse posten? –

+0

zeigen Sie ein Schnipsel der Ergebnisse ... –

+0

Ich weiß nicht, wie Ergebnisse angezeigt werden, weil diese Daten fiktiv sind. –

Antwort

0

Try

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

unglaublich, dass wah genau das, was ich suchte. obwohl ich nicht verstanden habe, wie es funktioniert! –

+0

Sie können keinen Alias ​​('tipo') in einer Gruppe nach Abschnitt – Christian

+2

verwenden. Äh, ja, Sie können. – Strawberry

0

In Fällen wie diesen zu benutzen, ich wickle nur die Abfrage in einer anderen Abfrage, die Türen die Gruppierung, die viele Ausdrücke speichern wiederholen, einfacher zu lesen und es tragbar:

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 

Beachten Sie auch die Verwendung von EXTRACT, um Jahr und Monat in einem Ausdruck anzugeben.