A 主表
B,C  两张A的从表。当A表id在B表时,统计B表某字段money的数据。
当A表id在C表时,统计C表某字段money的数据。想到case when但是总是返回常量,求解答sql

解决方案 »

  1.   


    SELECT a.id,SUM(ISNULL(b.money,c.money) money
    FROM a
    LEFT JOIN b ON a.id=b.id
    LEFT JOIN c ON a.id=c.id
    GROUP BY a.id
      

  2.   


    select A.ID,B.amt as B金额,C.amt as C金额
    from A
    left join (select Aid ,SUM(amt) as amt from B group by Aid) B on A.id=B.Aid
    left join (select Aid ,SUM(amt) as amt from C group by Aid) C on A.id=C.Aid
      

  3.   


    SELECT a.id,SUM(ISNULL(b.money,c.money)) money
    FROM a
    LEFT JOIN b ON a.id=b.id
    LEFT JOIN c ON a.id=c.id
    GROUP BY a.id
      

  4.   

    SELECT a.*, [money] = COALESCE(a.[money], b.[money], 0) --COALESCE函数中可以加任意多的参数,它返回第一个不为NULL的参数值
    FROM tableA a
    LEFT JOIN tableB b
    ON a.id = b.id
    LEFT JOIN tableC c
    ON a.id = c.id
      

  5.   

    比如说,从D表获得公式,取A表的money进行运算
      

  6.   

    如果D表的公式,字段存储成一个字符串的话,且比较复杂,不好用SQL解析的话,就用存储过程或函数,或最好放取出数据,放到前台来解析。楼主没给数据,无法给出答案。
    SELECT 
    a.*, 
    [money] = COALESCE(a.[money], b.[money], a.[money]), 
    d.公式,
    是否利用公式=(CASE WHEN COALESCE(a.[money], b.[money]) IS NULL THEN 1 ELSE 0 END)
    FROM tableA a
        LEFT JOIN tableB b
            ON a.id = b.id
        LEFT JOIN tableC c
            ON a.id = c.id
    LEFT JOIN tableD d
    ON a.id = d.id
      

  7.   

    涉及到从D表取公式算这种,只能在程序中去完成,这是SQL没办法做的。SQL最强大的地方就是集合的运算。
      

  8.   

    如果D表的公式,字段存储成一个字符串的话,且比较复杂,不好用SQL解析的话,就用存储过程或函数,或最好放取出数据,放到前台来解析。楼主没给数据,无法给出答案。
    SELECT 
    a.*, 
    [money] = COALESCE(a.[money], b.[money], a.[money]), 
    d.公式,
    是否利用公式=(CASE WHEN COALESCE(a.[money], b.[money]) IS NULL THEN 1 ELSE 0 END)
    FROM tableA a
        LEFT JOIN tableB b
            ON a.id = b.id
        LEFT JOIN tableC c
            ON a.id = c.id
    LEFT JOIN tableD d
    ON a.id = d.id
    恩,用这个函数解决了