2

私はSQLにまったく慣れていないので、私の質問は非常に単純だと思いますが、これまでのところ、自分で目的の出力を実行することはできませんでした。

私は調査を行い、3人に課題A(3つのタスク)を解決し、3人に課題B(3つのタスク)を解決するように依頼しました。

そして、次のようなテーブルを作成しました。

Table: Results
+---------+---------+---------+---------+---------+
| ID      | AssgnID | Answer1 | Answer2 | Answer3 |
+---------+---------+---------+---------+---------+
| 1       | A1      | 20      | 45      | 80      |   
| 2       | A1      | 22      | 40      | 82      |  
| 3       | A1      | 25      | 39      | 85      |
| 4       | A2      | 45      | 10      | 75      |
| 5       | A2      | 50      | 15      | 72      |
| 6       | A2      | 50      | 12      | 80      |
+---------+---------+---------+---------+---------+

私が今やりたいのは、AssgnID A1とA2に対して、次のようにすべての回答を1行で表示することです。

Table: Results per AssgnID
+---------+---------+---------+---------+---------+--------+---------+---------+--------+---------+---------+
| ID      | AssgnID | Answer1 | Answer2 | Answer3 |Answer4 | Answer5 | Answer6 |Answer7 | Answer8 | Answer9 |
+---------+---------+---------+---------+---------+---------+---------+---------+-------+---------+---------+
| 1       | A1      | 20      | 45      | 80      | 22     | 40      | 82      | 22     | 40      | 82          
| 2       | A2      | 45      | 10      | 75      | 50     | 15      | 72      | 50     | 12      | 80                  
+---------+---------+---------+---------+---------+---------+---------+---------+-------+---------+---------+

DISTINCTまたはGROUPBYを使用して個別のAssgnIDを表示することはできますが、すべての結果を同じ出力に表示することはできません。

JOINで何かを試す必要がありますか?

よろしくお願いします。ありがとう

4

1 に答える 1

1

回答のリストを実際の列ではなくコンマ区切りのリストとして受け入れる場合は、PostgreSQLを使用string_agg()して、各行の3つの回答列を1つのユニットに連結し、それらすべてをグループ化することで、それらをリストに強制できます。 :

SELECT 
  AssgnID,
  /* Concat the 3 answers together with `,`, the group all rows together separated by `,` */
  string_agg((Answer1 || ',' || Answer2 || ',' || Answer3), ',') AS Answers
FROM yourtable
GROUP BY AssgnID

生成されます:

A1   20,45,80,22,40,82,22,42,82
A2   45,10,75,50,15,72,50,12,80

ただし、追加のSQL操作を実行する必要がある場合、最善の行動と永続的な解決策は、これらの回答を正規化された方法で格納するようにテーブル構造を再設計することです。このメソッドは、1つのテーブルで調査を定義し、別のテーブルは回答ごとに1行、またはごとに3行を保持しますSurveyID

テーブル調査

SurveyID
AssgnID
UserID

テーブルの回答

SurveyID
Answer
Value
于 2012-08-20T16:29:33.897 に答える