查询结果将行显示为列

时间:2011-09-30 21:00:30

标签: sql pivot crosstab

我有一个动态创建复选框的表单。用户登录并为所有复选框选择0。复选框数组是从表'options'生成的。表格将记录提交到2个表格的“调查”(一个人员数据记录)和“选择”(调查密钥和选项密钥(或密钥))。 我想提取一份报告,该报告将显示所有可能的选项作为列标题,其中包含调查表中选择该选项的人员列表。所以我的结果看起来像这样:

    FirstAid   Triage    Firefighting  HamRadio
    Sam         Sue        Sam
    Judy        Judy       Bill
                Bob

所以所有选项都会显示在结果上,即使没有人选择它。

表的结构是:

     OPTIONS
     option_id   description

     SURVEY
     survey_id   name

     SELECTED OPTIONS
     survey_id   option_id

这是实际数据的简化示例,但包括关键部分(我认为)。我如何使用SQL来获得我需要的结果?

由于

1 个答案:

答案 0 :(得分:1)

免责声明:我在几年内没有使用过Postgres,因此可能有比我列出的更好的方法来完成这项任务。

选项1:使用Case When语句,如以下链接解决方案中所做的那样。
correct way to create a pivot table in postgresql using CASE WHEN

选项2 :使用Crosstab中提供的tablefunc contrib功能,如以下链接解决方案中所做的那样。
PostgreSQL Crosstab Query

crosstab tablefunc contrib http://www.postgresql.org/docs/9.1/static/tablefunc.html

的文档