调查表汇总计数(200分)

  • 主题发起人 主题发起人 changetao
  • 开始时间 开始时间
C

changetao

Unregistered / Unconfirmed
GUEST, unregistred user!
准备做一个调查表程序,调查表设计如下:
| 回答1 | 回答2 | 回答3
问题1 | √ | |
问题2 | | √ |
问题3 | | | √
问题4 | √ | |
问题5 | | √ |

回答时在所选的回答划钩,然后调查表录入数据表中,
数据表结构及记录如下:
|问题1|问题2|问题3|问题4|问题5|……
记录一| 1 | 1 | 2 | 3 | 2 |
记录二| 2 | 1 | 1 | 2 | 1 |
记录三| 3 | 1 | 3 | 2 | 3 |

记录表中的数字为调查表的回答代码,现在要对每个问题的回答进行汇总计数,
计算出每个问题的不同回答数,

生成如下结果表:

| 回答1 | 回答2 | 回答3
问题1 | 1 | 1 | 1
问题2 | 3 | 0 | 0
问题3 | 1 | 1 | 1
问题4 | 0 | 2 | 1
问题5 | 1 | 1 | 1

该如何做?或者数据表的结构设计上有无更好的改进?谢谢?我学Delphi和sql不久,请各位多多指教。
 
数据表结构及记录如下:
|问题1|问题2|问题3|问题4|问题5|……
记录一| 1 | 1 | 2 | 3 | 2 |
记录二| 2 | 1 | 1 | 2 | 1 |
记录三| 3 | 1 | 3 | 2 | 3 |

改为
数据表结构及记录如下:
记录| 问题 | 回答 |
记录一| 问题1 | 1 |
记录一| 问题2 | 2 |
记录一| 问题3 | 3 |
记录一| 问题4 | 1 |
记录一| 问题5 | 2 |
...

数据库第一范式就是无重复的列
 
谢谢Power255,原先的表在录入调查表时候每张调查表只需要录入一条记录就可以了,如果按照你的结构,一张调查表不就要录入多条记录了吗?不过修改后简洁多了,而且在统计汇总时也容易操作些了吧。
关键是汇总结果的方法我现在不得要领。请大家多多关注!谢谢!
 
问题你也要做成一张表,
|id|问题内容|
保存时就保存Id,汇总结果用下面的SQL

select A.问题内容,
(select sum(1)
from 数据表 B
where B.回答 = 1
and B.问题id = 问题id) as 回答1,
(select sum(1)
from 数据表 B
where B.回答 = 2
and B.问题id = 问题id) as 回答2,
(select sum(1)
from 数据表 B
where B.回答 = 3
and B.问题id = 问题id) as 回答3
from 问题 A
 
再次谢谢Power255!我刚开始学,不是很懂,我昨天按你的表结构修改了我的表(Access表),现在直接在其交叉表中就可以得出结果了。但我主要还是学习用delphi来做。就你上所说,我的表结构是不是改成下面:

问题表:
|问题id| 问题内容 |
| 1 | 问题1 |
| 2 | 问题2 |
| 3 | 问题3 |
……
回答表:
记录 |问题id| 回答 |
记录一| 1 | 2 |
记录二| 2 | 1 |
记录三| 3 | 3 |
……
最后
select sum(1)
from 数据表 B
where B.回答 = 1
and B.问题id = 问题id) as 回答1
改如何理解?谢谢!
解释完毕就给分。
 
是啊,SQL 的“as 回答1”是起一个别名,
select sum(1)
from 数据表 B
where B.回答 = 1
and B.问题id = A.问题id
是做一个记录统计,sum(1)也可以用count(*)代替。
等于是select sum(1)
from 数据表 B
where B.回答 = 1
and B.问题id = (一个个的历遍A表所有的问题id)
 
帮你顶,发个QQ交流群!交流学习:
delphi交流群:4654765(delphi天堂)欢迎您的加入!让我们共同进步!!
 
谢谢POWRE255!
 
后退
顶部