2011-05-13 7 views
3

この数日間、私はこの問題に対する答えを見つけようとしています。私は答えを見つけられませんでしたが、このサイトは検索結果に表示され続けるので、試してみると思いました。投稿BTWのための素晴らしいフォーマットオプション。私はに変身したいMySQLのピボットテーブル

user_id | form_id | question_id | data_label | data_value 
1   1   1    firstName Joe 
1   1   2    lastName  Smith 
1   1   3    phone  5554443333 
2   1   1    firstName Sally 
2   1   2    lastName  Jones 
2   1   3    phone  3334445555 

:私はこれを行う方法の一例を見つけることができます

user_id | firstName | lastName | phone 
1   Joe   Smith  5554443333 
2   Sally  Jones  3334445555 

は、私のようなテーブルを持っています。私は彼らをよく理解していませんが、彼らはそこにいます。私のユニークな問題は、この単一のテーブルが、可能な数のフィールドでさまざまな形式から入力されたデータを保持しているときに発効します。だから、私はテーブルがあるとします、私は、パラメータとしてform_idに渡します

user_id | form_id | question_id | data_label | data_value 
1   1   1    firstName Joe 
1   1   2    lastName  Smith 
1   1   3    phone  5554443333 
2   1   1    firstName Sally 
2   1   2    lastName  Jones 
2   1   3    phone  3334445555 
3   2   1    fav_color red 
3   2   2    fav_animal eagle 
4   2   1    fav_color blue 
4   2   2    fav_animal dog 

ユーザー(彼らはすべての異なる値と同じラベルを持つべきである)によってグループ化されているフォームからすべてのレコードを収集し、その後、表示されるデータのように:form_id = 1レポートが見え

...のような:

user_id | fav_color | fav_animal 
3   red   eagle 
4   blue  dog 
:form_id = 2レポートがどのように見える

user_id | firstName | lastName | phone 
1   Joe   Smith  5554443333 
2   Sally  Jones  3334445555 

...

私は高度なSQLプログラミングとプロシージャを初めて習得しており、これを自分で行う方法を理解することはできません。各フォームのクエリに正確なフィールド名を入力することなく、任意の数値/タイプのフィールドを処理できるクエリが必要です。すぐ上の最初のクエリには4つのフィールドがあり、2番目のクエリには3があることに注意してください。このように、ソリューションには柔軟性が必要です。

SQLはプログラミング言語から生成することもできます.SQLがプログラミング言語から生成されるので、その解決策があればさらに多くのオプションがあります。

十分な情報がない場合はお知らせください。

答えて

3

あなたは

select form_id, 
max(case data_label when 'lastName' then data_value else null end) as lastname, 
max(case data_label when 'firstName' then data_value else null end) as firstname, 
max(case data_label when 'phone' then data_value else null end) as phone 
from mytable 
group by form_id 
+0

のような(未テスト)何かを試みることができるあなたの応答をありがとうございました。私は今までこれを見ていないとは思えませんが、SQL文をプログラマチックに作成することができるので、最初にフィールド名のデータを照会してから、それぞれのタイプのSQL文を動的に作成することができます。私が上記の声明に行った唯一の変更は、 "form by group by user_id"に変更することでしたので、各ユーザーの応答とそのフォームの最初の応答を取得しました。あなたの助けをもう一度ありがとう! –

関連する問題