2012-10-08 117 views
0

我已经运行下面的查询我的数据: -SQL SUM混乱

SELECT  CONTRACTNAME, 
      AccountNo, 
      TransDate, 
      JournalNo, 
      AuditTrail,   
      Description,  
      CONTRACTNUMBER, 
      GROUPING(CONTRACTNUMBER) as CONTRACTNUMBER, 
      SUM(PAFeebillamount)as Total 
FROM  SRVS.dbo.BTQGLDistributionsWithProjectCodesHM 
WHERE  TransDate > '2012' AND CONTRACTNUMBER <> '00900' 
GROUP BY CONTRACTNAME, 
      AccountNo, 
      TransDate, 
      JournalNo, 
      AuditTrail,  
      Description,  
      CONTRACTNUMBER with rollup 
ORDER BY GROUPING (CONTRACTNUMBER) 

这给了我的结果: -

enter image description here

我怎样才能改变这种做法,我得到一个单一每个合同编号的总数。所以它看起来像下面的例子: -

enter image description here

在这个时刻,我不打扰关于ACCNT没有/杂志没有等,因为它只会做个总结。

只是寻求建议,以最好的方式总结我的合同号码组?

+2

但是在'accntNo','journalNo'等如果你没有b返回othered? –

+0

这是另一个问题。目前满意NULL值或零。我甚至可能会把他们从被展示出来。只要看一下最好的方法就是先尝试总和 – user1086159

回答

1
SELECT  CONTRACTNAME, 
      '' AccountNo, 
      '' TransDate, 
      '' JournalNo, 
      '' AuditTrail,   
      '' Description,  
      CONTRACTNUMBER, 
      GROUPING(CONTRACTNUMBER) as CONTRACTNUMBER, 
      SUM(PAFeebillamount)as Total 
FROM  SRVS.dbo.BTQGLDistributionsWithProjectCodesHM 
WHERE  TransDate > '2012' AND CONTRACTNUMBER <> '00900' 
GROUP BY CONTRACTNAME,     
      CONTRACTNUMBER with rollup 
ORDER BY GROUPING (CONTRACTNUMBER) 
1
SELECT CONTRACTNAME, CONTRACTNUMBER, grouping(CONTRACTNUMBER) as CONTRACTNUMBER 
SUM(PAFeebillamount)as Total 
FROM SRVS.dbo.BTQGLDistributionsWithProjectCodesHM 
WHERE TransDate > '2012' AND CONTRACTNUMBER <> '00900' 
GROUP BY 
    CONTRACTNAME, 
    CONTRACTNUMBER with rollup 
ORDER BY GROUPING (CONTRACTNUMBER) 

这应该会给你一份你所拥有的每份合约。您得到多个结果的原因是因为您在contractName,Acct,Date,JournalNo,AuditTrail和Desc中进行分组。如果您想要一个完整的总额(每个合同编号一个),那么您需要对合同编号进行分组。

0

既然你arn't打扰一下一下地选择AccountNo, TransDate, etc,您可以使用MAX作为聚合函数是这样的:

SELECT 
    CONTRACTNAME, 
    MAX(AccountNo), 
    MAX(TransDate), 
    MAX(JournalNo), 
    MAX(AuditTrail), 
    MAX(Description), 
    CONTRACTNUMBER, 
    GROUPING(CONTRACTNUMBER) as CONTRACTNUMBER, 
    SUM(PAFeebillamount)as Total 
FROM SRVS.dbo.BTQGLDistributionsWithProjectCodesHM 
WHERE TransDate > '2012' 
    AND CONTRACTNUMBER <> '00900' 
GROUP BY 
    CONTRACTNAME, 
    CONTRACTNUMBER with rollup 
ORDER BY GROUPING (CONTRACTNUMBER) 

,如果你不想让他们只从SELECT声明中删除或用NULL''替换它们:

SELECT 
    CONTRACTNAME, 
    CONTRACTNUMBER, 
    GROUPING(CONTRACTNUMBER) as CONTRACTNUMBER, 
    SUM(PAFeebillamount)as Total 
FROM SRVS.dbo.BTQGLDistributionsWithProjectCodesHM 
WHERE TransDate > '2012' 
    AND CONTRACTNUMBER <> '00900' 
GROUP BY 
    CONTRACTNAME, 
    CONTRACTNUMBER with rollup 
ORDER BY GROUPING (CONTRACTNUMBER)