我把我的表简单的解释成这样...其实比这个咳复杂,只是来想听去一下意见。我的设计师这样的, 在表A中有三个姓名 W1,W2,W3,
有两个表,一个工资加薪表:W1 加薪两次,每次500元,W2加薪,加了500元,
 另外一个表示一个 扣工资表 W1 扣了1次,为200元,W3扣了2次为共计500元,
 他们的几本工资是2000元,利用select 查询2个表,列出工资总数,和加薪和扣分情况(次数)
我的原表中是这样的:select ---学分=100-SUM(考勤表.缺课记录)+3*SUM(获得表.获奖)
就是在这个意思,缺课是1分每一次,获奖时每次奖励3分,
但是,我也试了,包括奖励临时表的形式,但是只有一个学生在具有缺课记录和获奖记录的同时的时候,才会输出成绩。
但是,如果两个只有一个应用的话,那么就显示为NULL!!所以这里是不是明白啊想了1个多小时了。还是不得思路啊。。各位高人高见 啊。

解决方案 »

  1.   

    http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
    参考此人提问方式。
      

  2.   

    左联接
    isnull函数
    加在一起可搞定
      

  3.   

    我晕,,的确是是。。
    就是利用一个isnull函数,
    开始为什么老是出现不了结果的额原因好像是SQL 一个数值+null 那么就是nULL?不知我说的对不????
      

  4.   

    我刚提问完,就在网上看到了ISnull 函数,,,
    原帖地址是:
    http://topic.csdn.net/t/20060429/14/4723609.html
      

  5.   


    --> 测试数据: @表A
    declare @表A table (id int,name varchar(2))
    insert into @表A
    select 1,'w1' union all
    select 2,'w2' union all
    select 3,'w3'declare @加薪表 table (jid int,userid int,num int)
    insert into @加薪表
    select 1,1,500 union all
    select 2,1,500 union all
    select 3,2,500declare @扣薪表 table (kid int,userid int,num int)
    insert into @扣薪表
    select 1,1,200 union all
    select 2,3,200 union all
    select 3,3,300declare @基本工资 int
    set @基本工资=2000select a.name,
    [工资总数]=@基本工资+isnull(b.加薪总金额,0)-isnull(c.扣薪总金额,0),
    加薪次数=isnull(b.加薪次数,0),
    扣薪次数=isnull(c.扣薪次数,0)
    from @表A a
    left join 
    (select userid,count(*) as 加薪次数,sum(num) as 加薪总金额 from @加薪表 group by userid) b on a.id=b.userid
    left join 
    (select userid,count(*) as 扣薪次数,sum(num) as 扣薪总金额 from @扣薪表 group by userid) c on a.id=c.userid/*
    name 工资总数        加薪次数        扣薪次数
    ---- ----------- ----------- -----------
    w1   2800        2           1
    w2   2500        1           0
    w3   1500        0           2
    */
      

  6.   

    null和任何值做+-*/都为null。
    isnull是判断为空后可以给值的,例如我上面的isnull(col,0)
      

  7.   

    用 not null 字段即可