-2

テーブルからの出力に続く結果となるSQLクエリ(MySQL)を誰か教えてください。

ここに画像の説明を入力

4

2 に答える 2

1

あなたは PIVOT TABLE 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);
于 2013-03-21T10:46:18.543 に答える
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')
;
于 2013-03-21T10:50:51.617 に答える