2013-03-21 3 views
-2

может ли кто-нибудь сказать мне sql-запрос (MySQL), который будет выводиться после вывода из таблицы.sql query, который дает следующий результат:

enter image description here

+0

Вы знакомы с концепцией поворота? – Rachcha

+0

Что это за mysql or oracle? –

+1

Дата 30/2/2013 ?? В каком году февраля было 30 дней? – Rachcha

ответ

1

Вы после того, как сводная таблица QUERY - хотя это часто лучше выполнять основную агрегацию (My) SQL, а затем обрабатывать проблемы отображения на уровне приложений (например, с небольшим количеством PHP).

Стандартный запрос может выглядеть следующим образом, хотя MySQL поддерживает сокращенные отклонения от этого стандарта ...

SELECT DATE_FORMAT(date,'%M') month 
    , COALESCE(SUM(CASE WHEN status = 'Rahul' THEN value END),0) Rahul 
    , COALESCE(SUM(CASE WHEN status = 'Vijay' THEN value END),0) Vijay 
    , COALESCE(SUM(CASE WHEN status = 'Loki' THEN value END),0) Loki 
    FROM my_table 
GROUP 
    BY MONTH(date); 
+0

GROUP BY должен включать YEAR (дата), иначе это может не работать в какое-то время. –

+0

Это было преднамеренно. Я думал, что OP хочет сравнивать месячную производительность на протяжении всех лет, но я, конечно, ошибаюсь. – Strawberry

1
WITH w AS (
    SELECT 10 AS value, 'Rahul' AS status, TO_DATE('20/01/2013', 'DD/MM/YYYY') AS date_time FROM dual 
    UNION ALL 
    SELECT 15, 'Vijay', TO_DATE('28/02/2013', 'DD/MM/YYYY') FROM dual 
    UNION ALL 
    SELECT 20, 'Loki', TO_DATE('03/02/2013', 'DD/MM/YYYY') FROM dual 
    UNION ALL 
    SELECT 25, 'Kiran', TO_DATE('05/01/2013', 'DD/MM/YYYY') FROM dual 
    UNION ALL 
    SELECT 5, 'Rahul', TO_DATE('02/01/2013', 'DD/MM/YYYY') FROM dual 
    UNION ALL 
    SELECT 15, 'Vijay', TO_DATE('10/01/2013', 'DD/MM/YYYY') FROM dual 
    UNION ALL 
    SELECT 08, 'Loki', TO_DATE('01/01/2013', 'DD/MM/YYYY') FROM dual 
) 
    SELECT TO_CHAR(date_time, 'Mon') AS m 
     , SUM(CASE status WHEN 'Rahul' THEN value ELSE 0 END) AS Rahul 
     , SUM(CASE status WHEN 'Vijay' THEN value ELSE 0 END) AS Vijay 
     , SUM(CASE status WHEN 'Loki' THEN value ELSE 0 END) AS Loki 
     , SUM(CASE status WHEN 'Kiran' THEN value ELSE 0 END) AS Kiran 
     , SUM(value) AS Total 
    FROM w 
GROUP BY TO_CHAR(date_time, 'Mon') 
ORDER BY TO_DATE(TO_CHAR(date_time, 'Mon'), 'Mon') 
; 
Смежные вопросы