adoquery+dbgird+datasource从两张表(课程信息表,学生选课信息表)中select一些信息在dbgrid中显示课程编号由combobox获得语句如下select 课程信息表.课程编号,课程信息表.课程名称,课程信息表.授课教师,课程信息表.选课总人数,count(*) as 已选人数 from 课程信息表,学生选课信息表  where 课程信息表.课程编号=学生选课信息表.课程编号
and 学生选课信息表.课程编号 like ''%'+combobox8.Text+'%'''
group by 课程信息表.课程编号,课程信息表.课程名称,课程信息表.授课教师,课程信息表.选课总人数
        此语句存在两个问题1。因为两表相连,因此没有学生选的课将不会显示,但是希望能显示,该怎么做?2。count出的选课人数是所有选这门课的人数,当一门课有多个老师教的时候,希望能分别显示选各个老师的人数,该怎么做?请大家帮忙

解决方案 »

  1.   

    select 课程信息表.课程编号,课程信息表.课程名称,课程信息表.授课教师,课程信息表.选课总人数,count(*) as 已选人数 from 课程信息表 Left outer join 学生选课信息表  on 课程信息表.课程编号=学生选课信息表.课程编号
    where 学生选课信息表.课程编号 like ''%'+combobox8.Text+'%'''
    group by 课程信息表.课程编号,课程信息表.课程名称,课程信息表.授课教师,课程信息表.选课总人数
      

  2.   

    to yurenjf(极限):
    select 课程信息表.课程编号,课程信息表.课程名称,课程信息表.授课教师,课程信息表.选课总人数,count(*) as 已选人数 from 课程信息表 Left outer join 学生选课信息表  on 课程信息表.课程编号=学生选课信息表.课程编号
    where 学生选课信息表.课程编号 like ''%'+combobox8.Text+'%'''
    group by 课程信息表.课程编号,课程信息表.课程名称,课程信息表.授课教师,课程信息表.选课总人数
    使用左连接查询,可以将没有学生选的课程列出(null值填充),但是统计已选人数使用count(*),将这些行统计结果为1,而不是期望的0,所以要统计为null的列,
    在学生选课信息表中应该有学号字段(stuCode),试试下面的答案:
    select 课程信息表.课程编号,课程信息表.课程名称,课程信息表.授课教师,课程信息表.选课总人数,count(stuCode) as 已选人数 from 课程信息表 Left outer join 学生选课信息表  on 课程信息表.课程编号=学生选课信息表.课程编号
    where 学生选课信息表.课程编号 like ''%'+combobox8.Text+'%'''
    group by 课程信息表.课程编号,课程信息表.课程名称,课程信息表.授课教师,课程信息表.选课总人数
      

  3.   

    对于第二个问题:(在课程信息表中组合主键(课程编号、授课教师),在学生选课信息表有对应的外键)
    select 课程信息表.课程编号,课程信息表.课程名称,课程信息表.授课教师,课程信息表.选课总人数,count(stuCode) as 已选人数 from 课程信息表 Left outer join 学生选课信息表  on 课程信息表.课程编号=学生选课信息表.课程编号 and 课程信息表.授课教师=学生选课信息表.授课教师
    where 学生选课信息表.课程编号 like ''%'+combobox8.Text+'%'''
    group by 课程信息表.课程编号,课程信息表.课程名称,课程信息表.授课教师,课程信息表.选课总人数
    建议:以后这种情况最好列出表结构,表名、列名使用标识符。
      

  4.   

    问题1。用左联 把count(*)改成count(学生选课信息表. 学号)2。加上 课程信息表.授课教师=学生选课信息表.授课教师 作为连接条件