表一:chengji
stu_id kecheng chengji
001 语文 80
002 语文 91
003 数学 78
001 英语 80
004 语文 67
表二:banji
banji_id banji_name
1 一年级
2 二年级
表三:stu
stu_id banji_id
001 1
002 2
003 1
004 1
想要得到一个视图,显示如下,请问如何实现?
视图:chengji_cx
banji_name kecheng    count_stu
一年级 语文 2
二年级 语文 1
一年级 数学 1
一年级 英语 1
说明:视图中的count_stu项为符合前两项条件的学生统计数.如第一条记录中表示一年级中有语文成绩的学生为2个.

解决方案 »

  1.   


    CREATE VIEW chenji_cx
    AS
    SELECT A.banji_name, C.kecheng, count(*) as count_stu
    FROM banji AS A
    INNER JOIN stu AS B 
       ON A.stu_id = B.stu_id
    INNER JOIN chengji AS C
       ON C.banji_id = B.banji_id
    GROUP BY A.banji_name, C.kechengGO没用数据检查, 抱歉.
      

  2.   


    SELECT b.banji_name, a.kecheng, COUNT(a.kecheng) AS count_stu FROM stu c INNER JOIN
          banji b ON c.banji_id = b.banji_id INNER JOIN
          chengji a ON c.stu_id = a.stu_id
    GROUP BY b.banji_name, a.kecheng/*
    stu_id kecheng    chengji     
    ------ ---------- ----------- 
    001    语文         80
    002    语文         91
    003    数学         78
    001    英语         80
    004    语文         67
    */
      

  3.   

    create view v1
    as
    select banji_name,kecheng,count(chengji)
    from chengji,banji,stu
    where banji.banji_id=stu.banji_id and chengji.stu_id=stu.stu_id
    GROUP BY banji_name, kecheng
      

  4.   


    CREATE VIEW chenji_cx
    AS
    SELECT A.banji_name, C.kecheng, count(*) as count_stu
    FROM banji AS A
    INNER JOIN stu AS B 
       ON A.stu_id = B.stu_id
    INNER JOIN chengji AS C
       ON C.banji_id = B.banji_id
    GROUP BY A.banji_name, C.kecheng
      

  5.   

    结果是这个:
    stu_id banji_id 
    ------ -------- 
    001    1
    002    2
    003    1
    004    1
    贴错了。郁闷。