1、能求出差的语句:  “剩余专款”能得出正确的数值
   SELECT a.上级文号, a.来款项目, a.科目编码, a.科目名称, a.来款金额, a.资金分类, a.备注, b.指标文号, b.单位名称, b.补助内容, b.补助金额, 
CASE WHEN EXISTS 
(SELECT 1 
FROM yusuanxiada 
WHERE 上级文号 = b.上级文号 AND  单位名称> b.单位名称 ) 
THEN NULL ELSE a.来款金额 - ISNULL(C.C , 0) END AS 剩余专款
 FROM zhuankuanlaikuan AS a LEFT OUTER JOIN 
yusuanxiada AS b ON a.上级文号 = b.上级文号 AND 
a.上级文号 > '0' LEFT OUTER JOIN 
(SELECT 上级文号, SUM(补助金额) AS C 
FROM yusuanxiada 
GROUP BY 上级文号) AS C ON a.上级文号 = C.上级文号2、不能求出差的语句: “剩余未分配”是空白  SELECT a.项目名称, a.金额, b.指标文号, b.单位名称, b.补助内容, b.补助金额, b.备注, 
      CASE WHEN EXISTS
          (SELECT 1
         FROM yusuanxiada
         WHERE 项目名称 = b.年初市级专项 AND 单位名称 > b.单位名称) 
     THEN NULL ELSE a.金额 - ISNULL(C.C, 0) END AS 剩余未分配
FROM 市级专项 AS a LEFT OUTER JOIN  
      yusuanxiada AS b ON a.项目名称 = b.年初市级专项 AND
       a.项目名称> '0' LEFT OUTER JOIN
          (SELECT 年初市级专项, SUM(补助金额) AS C
         FROM yusuanxiada
         GROUP BY 年初市级专项) AS C ON a.项目名称 = C.年初市级专项
能给出原因及解决方法吗?

解决方案 »

  1.   

    一、
    A表:上级来款表zhuankuanlaikuan包括字段名: 上级文号, 来款项目, 科目编码, 科目名称, 来款金额, 资金分类,备注B表:预算下达表yusuanxiada包括字段名: 指标文号, 单位名称, 补助内容, 补助金额,上级文号要求:新列一张表看出上级来款的分配情况并求出剩余专款:
     
      SQL语句:
       SELECT a.上级文号, a.来款项目, a.科目编码, a.科目名称, a.来款金额, a.资金分类, a.备注, b.指标文号, b.单位名称, b.补助内容, b.补助金额, 
    CASE WHEN EXISTS 
    (SELECT 1 
    FROM yusuanxiada 
    WHERE 上级文号 = b.上级文号 AND  单位名称> b.单位名称 ) 
    THEN NULL ELSE a.来款金额 - ISNULL(C.C , 0) END AS 剩余专款 
    FROM zhuankuanlaikuan AS a LEFT OUTER JOIN 
    yusuanxiada AS b ON a.上级文号 = b.上级文号 AND 
    a.上级文号 > '0' LEFT OUTER JOIN 
    (SELECT 上级文号, SUM(补助金额) AS C 
    FROM yusuanxiada 
    GROUP BY 上级文号) AS C ON a.上级文号 = C.上级文号 
    剩余专款能够得到正确的值。
    二、C表:市级专项表 市级专项包括字段名: 项目名称,金额, 备注B表:预算下达表yusuanxiada包括字段名: 指标文号, 单位名称, 补助内容, 补助金额,上级文号,年初市级专项  
       要求:新列一张表看出市级专项的分配情况并求出未分配的市级专项:    SQL语句:   SELECT a.项目名称, a.金额, b.指标文号, b.单位名称, b.补助内容, b.补助金额, b.备注, 
          CASE WHEN EXISTS 
              (SELECT 1 
            FROM yusuanxiada 
            WHERE 项目名称 = b.年初市级专项 AND 单位名称 > b.单位名称) 
        THEN NULL ELSE a.金额 - ISNULL(C.C, 0) END AS 剩余未分配 
    FROM 市级专项 AS a LEFT OUTER JOIN  
          yusuanxiada AS b ON a.项目名称 = b.年初市级专项 AND 
          a.项目名称> '0' LEFT OUTER JOIN 
              (SELECT 年初市级专项, SUM(补助金额) AS C 
            FROM yusuanxiada 
            GROUP BY 年初市级专项) AS C ON a.项目名称 = C.年初市级专项     得到的结果是:能得到列出分配情况的新表,但剩余未分配里是空白,没有求出相应的余数。与第一项的基本结构是一样的,为什么这里求不出正确的余数?
        请大家帮忙看一下!