基本SQL - 显示特定项目的所有值

时间:2012-08-20 16:15:07

标签: sql

我对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显示所有答案:

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或GROUP BY显示不同的AssgnID,但我无法在同一输出中显示所有结果。

我是否必须尝试使用​​JOIN?

我非常感谢你的帮助。感谢

1 个答案:

答案 0 :(得分:1)

如果您愿意接受您的答案列表作为逗号分隔列表而不是实际列,您可以使用PostgreSQL的string_agg()通过将每行的三个答案列连接成一个列表来强制它们进入列表单位,然后将所有这些组合在一起:

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操作,最佳操作方法和最佳永久解决方案是重新设计表结构,以标准化方式存储这些答案。此方法在一个表中定义调查,另一个表每个答案占一行,或每SurveyID行三行。

表调查

SurveyID
AssgnID
UserID

表答案

SurveyID
Answer
Value