3

過去数日間、私はこの問題の答えを見つけようとしてきました。答えは見つかりませんでしたが、検索結果にこのサイトが表示され続けているので、やってみようと思いました。ところで、投稿の素晴らしいフォーマットオプション。

私は次のようなテーブルを持っています:

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  

これを行う方法の例を見つけることができます。私はそれらをよく理解していませんが、それらはそこにあります。私のユニークな問題は、この単一のテーブルが、可能な数のフィールドを持つさまざまなフォームから入力されたデータを保持しているときに発生します。だから、私は次のようなテーブルを持っているかもしれません:

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をパラメーターとして渡し、ユーザーごとにグループ化されたそのフォームからすべてのレコードを収集し(すべてのレコードに異なる値の同じラベルが付いている必要があります)、そのデータを次のように表示します。

... form_id = 1の場合、レポートは次のようになります。

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

... form_id = 2の場合、レポートは次のようになります。

user_id | fav_color | fav_animal  
3         red         eagle  
4         blue        dog  

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

SQLはプログラミング言語から生成することもできるので、それが役立つ場合は、そのソリューションでより多くのオプションがあります。

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

4

1 に答える 1

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
于 2011-05-13T21:06:36.277 に答える