有主表“考生资料表”和子表“考生成绩表”如下
“考生资料表”有字段:
[考生ID]、[考生姓名]
1        张三
2        李四
“考生成绩表”有字段:
[考生ID]、[科目]、[成绩是否合格]
1          A       1
1          B       0
2          A       1
2          B       1
希望建立一个视图如下
[考生ID]、[考生姓名]、[考生是否合格](这个字段的值通过子表计算)
1        张三          0
2        李四          1
怎么实现呀?我只会用以下方法计算出不合格记录的数量,但不会使用IIF把值大于0的变成“不合格”和等于0的变成“合格”
SELECT [考生ID],[科目],(SELECT COUNT(成绩是否合格)as [不合格记录数] FROM 考生成绩表 WHERE (考生ID = 考生资料表.生ID) AND (成绩是否合格 = 0)) FROM 考生资料表

解决方案 »

  1.   

    sql server 中用 case when[align=center]====  ====
    [/align]
      

  2.   

    select s.[考生ID],s.[考生姓名],c[科目],c.[成绩是否合格],
          CASE [成绩是否合格]
             WHEN 0 THEN '合格'
             ELSE '不合格'
          END
    from 考生资料表 s inner join 考生成绩表 c on s.考生ID=c.考生ID[align=center]====  ====
    [/align]
      

  3.   

    IIF (1>0, 1, 0)
    等价于SQL:
    case when 1>0 then 1 else 0 end
      

  4.   

    SELECT a.[考生ID],
           a.[考生姓名],
           b.[科目], 
           sum(case when b.成绩是否合格= 0 then 1 else 0 end) as 成绩是否合格
    FROM 考生资料表 a
    right join 考生成绩表 b on a.考生ID = b.考生ID
      

  5.   

    SELECT a.[考生ID],
           a.[考生姓名],
           b.[科目], 
           abs(成绩是否合格 - 1) as 成绩是否合格
    FROM 考生资料表 a
    right join 考生成绩表 b on a.考生ID = b.考生ID
      

  6.   

    再简化
    abs(成绩是否合格 - 1)  ===> 1 - 成绩是否合格
      

  7.   


    我也认为逻辑不通。从IIF函数来推断,我的理解为:如果及格的科目数大于不及格的科目数,视为及格,否则为不及格。