cmd.CommandText = "SELECT fdName, SUM(fdPay) - SUM(fdKK) + SUM(fdBT) AS fdpaycount FROM v_EveryDayWorkList WHERE (YEAR(fdDate) = " + dtTime.Year + ") AND (MONTH(fdDate) = " + dtTime.Month + ") GROUP BY fdWorkerID, fdName";两个表通过关联来显示,但是现在出现一个问题,表A的一第记录,对应表B中的多条记录,当表A中的字段fdKK,fdBT有数值的时候,因为关联的关系统,视图v_EveryDayWorkList中的相关记录中的fdKK,fdBT字段,都会有相应的值,这时就会造成sum(fdKK)和sum(fdBT)值错误.本来表A中的某条记录有fdKK,fdBT字段有值,不管表B中有多少条相关记录,这条记录都只统计一次fdBT和fdKK,这个SQL语句要怎么写呢?

解决方案 »

  1.   

    select a.fdKK,a.fdBT,(select count(*) from B where b.fdKK=a.fdKK and b.fdBT=a.fdBT)
    from a
    ???
      

  2.   


    fdBT fdKK fdName fdHJ
    15   0    赵峰   19.2
    15   0    赵峰   14这是表A中的一条记录对应表B中的两条记录,如果直接sum的话,fdBT中的15就会变成30,
    而我想要的结果是15+33.2=48.2
    而不是
    30+33.2=63.2
      

  3.   


    如果这样的话,是不是就不能使用视图了?这个是我的视图中的sql语句SELECT dbo.tb_WorkList.*, dbo.tb_WorkInfo1.fdWorkerID, dbo.tb_WorkInfo1.fdBT, 
          dbo.tb_WorkInfo1.fdKK, dbo.tb_WorkerInfo.fdName, dbo.tb_WorkInfo2.fdBZ, 
          dbo.tb_WorkInfo2.fdAmount, dbo.tb_WorkInfo2.fdJobID, dbo.tb_JobType.fdTypeName, 
          dbo.tb_JobItemInfo.fdJobTypeID, dbo.tb_WorkInfo2.fdPay, dbo.tb_JobItemInfo.fdPrice, 
          dbo.tb_JobItemInfo.fdPrice * dbo.tb_WorkInfo2.fdAmount AS fdHJ
    FROM dbo.tb_WorkInfo1 INNER JOIN
          dbo.tb_WorkerInfo ON 
          dbo.tb_WorkInfo1.fdWorkerID = dbo.tb_WorkerInfo.fdID INNER JOIN
          dbo.tb_WorkList ON dbo.tb_WorkInfo1.fdParentID = dbo.tb_WorkList.fdID INNER JOIN
          dbo.tb_WorkInfo2 ON 
          dbo.tb_WorkList.fdID = dbo.tb_WorkInfo2.fdParentID INNER JOIN
          dbo.tb_JobItemInfo ON 
          dbo.tb_WorkInfo2.fdJobID = dbo.tb_JobItemInfo.fdID INNER JOIN
          dbo.tb_JobType ON dbo.tb_JobItemInfo.fdJobTypeID = dbo.tb_JobType.fdID
      

  4.   


    --> 生成测试数据表: [ta]
    IF OBJECT_ID('[ta]') IS NOT NULL
    DROP TABLE [ta]
    GO
    CREATE TABLE [ta] ([id] [int],[fdBT] [int])
    INSERT INTO [ta]
    SELECT '1','15'--> 生成测试数据表: [tb]
    IF OBJECT_ID('[tb]') IS NOT NULL
    DROP TABLE [tb]
    GO
    CREATE TABLE [tb] ([aid] [int],[id] [int],[fdName] [nvarchar](10),[fdHJ] [numeric](3,1))
    INSERT INTO [tb]
    SELECT '1','1','赵峰','19.2' UNION ALL
    SELECT '1','2','赵峰','14'--SELECT * FROM [ta]
    --SELECT * FROM [tb]-->SQL查询如下:
    --你的情况:
    SELECT SUM(a.fdBT+b.fdhj) 
    FROM [ta] a
    JOIN tb b
    ON  a.id = b.aid
    /*---------------------------------------
    63.2(1 行受影响)
    */
    --解决方法:
    SELECT a.fdBT+b.fdhj 
    FROM ta a
    JOIN (
             SELECT aid, SUM(fdHJ) fdhj 
             FROM tb
             GROUP BY aid
         ) b
    ON  a.id = b.aid
    /*
    ---------------------------------------
    48.2(1 行受影响)*/