Sql学得不好,求解一条Sql语句

YangYun 2012-04-03 11:58:59
我最近做了一条有关调查统计方面的程序,遇到了麻烦,特此来向高人们求救。
情况是这样的:
发出调查表,每张调查表(每张调查表有自己的编号:BiaoNO)中有许多道调查题,每道调查题又有几个选项供被调查者选择。我的调查回复表是这样设计的
回复ID(repID) 调查题ID(QuestionID) 调查题选项ID(ChoiceID) 调查表编号(biaoNO)
我现在的问题是这样的,我想知道,选择了某题下某选项以及另外某题某项的人数有多少人?
比如,在所有的调查表表中, 我想知道选择了第1题第2选项以及选择了第3题第4项的有多少人?


不知我说明白了吗?紧急求救啊

SQL学得真臭,没办法,只好稍微复杂一点的SQL语句就写不出来了(汗一下呀:(
...全文
205 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
utempdclhn1 2012-04-05
  • 打赏
  • 举报
回复
这个得用函数 存储过程 或者前端动态构造SQL语句啊
YangYun 2012-04-03
  • 打赏
  • 举报
回复
因为这个统计是动态生成的,我不知道用户将调查统计哪些题的哪些项,或者是想统计有多少人选择了某题某项,。
再补充一下:
一张调查题一般由二部分组成:题头项以及正式调查题
题头项如下列形式:
一、性别 选项:男 女
二、政治面貌 选项:党员 民主人士 无党派
正式调查题如:
题一、你认为某某方面做得好不好(单选)? 选项:1、好 2、一般 3、较差
题二、你认为下列哪些方面需要改进(多选)?选项:1、one 2、two 3、three
以上是模拟的一份调查表。
现在将这样的调查表发出100份,编号从001-100,

统计时,我想知道,性别=男,政治面貌=党员, 题一=1、好的有多少人?
又或者:我想知道,性别=女,题一=2、一般,题二=2、two的又有多少人?

这样我说明白了吧?我想知道的是怎样来统计我需要的人数?
SaintLance 2012-04-03
  • 打赏
  • 举报
回复
其实这个最好用函数如果数据库支持的话。
如果用单条SQL可以这样:
SELECT COUNT(DISTINCT biaoNO)
FROM [表名] AS t1 JOIN [表名] AS t2 ON t1.biaoNO = t2.biaoNO
WHERE t1.QuestionID = 1 and t1.RepID=2 and t2.QuestionID = 3 and t2.RepId=4

如果支持复合语句的话可以
SELECT COUNT(DISTINCT biaoNO)
FROM [表名]
WHERE biaoNO IN
(
SELECT DISTINCT biaoNO
FROM [表名]
WHERE QuestionID = 1 and RepID = 2
)
and QuestionID=3 and RepID=4
muyu_cc 2012-04-03
  • 打赏
  • 举报
回复
我已经有后端转为前端工程师了
尽管我现在前端还是很差 尽管我后端也有比较长的工作经验
YangYun 2012-04-03
  • 打赏
  • 举报
回复
楼上的,我根本都不知道有多少个条件呢,用if能行吗?
YangYun 2012-04-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
SQL code

select qestionID,choiceID,COUNT(qestionID) as personCount from T_Questionnaire group by qestionID,choiceID
[/Quote]

这个不符合我的本意,你这条SQL语句能够统计出选择了某道题某选项的人数。但不能够统计出我所说的选择了某题某项以及另外某题某项的人数。

我想这条SQL语句必须将BiaoNo包含进去,因为一张调查表由许多道调查题以及调查选项组成。一个选择了某题某项(因为一个人只能完成一个调查表,相当于一个考生在做同一种考试题,所有考题由单选以及多选题组成,在这里这个biaoNo就相当于考生的编号),对于老师来讲,他想知道有多少人选择了第1题的第1选项以及他想知道的某题的第几选项的有多少人。这条Sql返回的结果只能是一个数字。

不知道我说明白了吗?
wangnadh 2012-04-03
  • 打赏
  • 举报
回复
在C#里的话,把查询语句作为变量赋值给指定的变量
然后调用声明类中的方法进行查询,这样的

string sql = "select * from 表名 where 1=1";
if (第一个约束条件)
{
sql = sql + "and QuestionID='第一题' and ChoiceID='第二项' ";
}
if (第二个约束条件)
{
sql = sql + "and QuestionID='第三题' and ChoiceID='第四项' ";
}

if语句的触发条件……你自己看吧,可以设定成winform界面上某个复选框被选中什么的
然后调用事先写好的连接数据库的方法
统计人数……可以试试把查询结果显示在dataGridView控件上,然后统计dataGridView的行数
  • 打赏
  • 举报
回复
select qestionID,choiceID,COUNT(qestionID) as personCount from T_Questionnaire group by qestionID,choiceID
YangYun 2012-04-03
  • 打赏
  • 举报
回复
问题应该转化成对符合条件的调查回复表的统计。看看有所有的用户所填的调查回复表中(以biaoNO来唯一标识)。有多少张回复表符合条件
YangYun 2012-04-03
  • 打赏
  • 举报
回复
虽然是过节,不过还是期望大家给个建议呀

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧