2010-12-28 25 views
1

私は小規模な田舎の保健システムを支援しています。彼らは現在、四半期ごとに報告するいくつかの運用統計を追跡しています。同じテーブルの四半期データを比較するセルフ・ジョイン?

私はこれらの応答の肉を1つのテーブルに入れ、そこから歴史的な比較をしたいと思います。私は正規化のためのいくつかの追加のテーブルを持っていますが、ここには主なものがあります。

+-------+----------+-------------+----------+ 
| year | quarter | question_id | response | 
+-------+----------+-------------+----------+ 
| 2000 | 1  | 100   | 50  | 
+-------+----------+-------------+----------+ 
| 2000 | 2  | 100   | 100  | 
+-------+----------+-------------+----------+ 
| 2000 | 1  | 200   | 75  | 
+-------+----------+-------------+----------+ 
| 2000 | 2  | 200   | 25  | 
+-------+----------+-------------+----------+ 

私が探している出力はので、私はより良いと私のPHP処理まで簡単に変化を計算することができ、各質問のサイド・バイ・サイドのために、これらの四半期ごとの応答を置くことです。以下は、所望の出力です:

+-------------+----------------------+----------------------+ 
| question_id | 1st quarter response | 2nd quarter response | 
+-------------+----------------------+----------------------+ 
| 100   | 50     | 100     | 
+-------------+----------------------+----------------------+ 
| 200   | 75     | 25     | 
+-------------+----------------------+----------------------+ 

私は(MySQLの5を使用して)SQLに新たなんだと私は考えることができる唯一のことは、私が参加し、自己が必要です。私は試しましたが、それを得ることはできません。このような歴史的分析のための正しい方法をテーブル構造に近づけていますか?

すべてのポインタは、私たちのプロジェクトにとって大きな助けとなるでしょう!

ありがとうございます!

答えて

0

特定の年の出力を得たいと思っているとします。 2000:

SELECT 
    question_id, 
    (SELECT response FROM question_responses WHERE year = qr.year AND question_id = qr.question_id AND quarter = 1) AS qrt_resp_1, 
    (SELECT response FROM question_responses WHERE year = qr.year AND question_id = qr.question_id AND quarter = 2) AS qrt_resp_2 
    FROM question_responses AS qr 
    WHERE year = 2000 
    GROUP BY question_id 
1

あなたgroup by質問ができ、その四半期の回答を選択しcasemaxを組み合わせて使用​​します。この例ではmaxは、実際にmax何でも、それはcaseが値を返すためだけの四半期を選択

select question_id 
,  max(case when quarter = 1 then question_responses end) as Q1 
,  max(case when quarter = 2 then question_responses end) as Q2 
,  max(case when quarter = 3 then question_responses end) as Q3 
,  max(case when quarter = 4 then question_responses end) as Q4 
from question_responses 
where year = 2000 
group by 
     question_id 

を終了しません。

関連する問題