2011-09-30 51 views
1

我有一个动态创建复选框的表单。用户登录并在所有复选框中选择0。复选框数组是从表'选项'生成的。表格将记录提交到两个表格“调查”(一个人数据记录)和“选择”(调查键和选项键(或键))中。 我想提取一份报告,其中显示所有可能的选项作为列标题,并列出选择该选项的调查表中的人员。所以我的结果如下所示:将行显示为列的查询结果

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来获得我需要的结果?

感谢

+3

进行枢轴/交叉表查询的方法,根据数据库的类型而变化。请指出是否使用Oracle,MySql,Sql-Server等。 – dave

+0

这是postgres 8.1。表单是PHP,我使用PDO查询数据库并使用Pear Excel Writer将结果发送到Excel。 Thaks-- – Jazzy

+0

但是,任何方法都可以。我主要是在寻找逻辑。 – Jazzy

回答

1

免责声明:我没有使用过的Postgres在几年那么有可能是完成这一任务比我列出的那些更好的方法。

选项1:使用CaseWhen陈述如在下面的链接解决方案中所做的那样。
correct way to create a pivot table in postgresql using CASE WHEN

选项2:使用在tablefunc contrib可作为在下面的链接的解决方案做了Crosstab功能。
PostgreSQL Crosstab Query

的文档crosstab tablefunc contribhttp://www.postgresql.org/docs/9.1/static/tablefunc.html

+0

谢谢。我已经阅读了其中的一些内容,但很难将其应用于我的情况。尽管感谢指针。 – Jazzy