如何在不使用Group By子句的情况下调用列

时间:2014-02-03 06:50:42

标签: sql-server group-by

我是sql的新手,我有一个疑问

    select  t1.PayeeCode,t1.PayeeName,t1.PayeeIFSCCode,t1.grossAmount as ga,t2.Deduction          
      as da,(t1.grossAmount-t2.Deduction) as SubAmount from (
     (select PayeeCode,PayeeName,PayeeIFSCCode,PayeeBankAcNo,sum(PayeeAmount) as  
    grossAmount from tblPayees where AccountType='g' group by payeeCode, PayeeName,PayeeIFSCCode,PayeeBankAcNo) t1

        inner join

     (select PayeeCode,sum(PayeeAmount) as deduction from tblPayees where   
       AccountType='d' group by payeeCode) t2

 on t1.PayeeCode=t2.PayeeCode
 )

curent result

    
PayeeCode    payeename   payeeifsccode   ga   da   subamount  type
--------------------------------------------------------------
p1              x        123         1300   1400  100         g
p1              z        34             450    550  100         g
p1              y        35            150    150  0          d
p2              z        45            150   100   50         d

预期结果:

                                                                                                  
PayeeCode   payeename   payeeifsccode   ga   da   subamount  type
--------------------------------------------------------------
p1              x        123         1750    1950  200        g
p1              y         35        300     250   50        d

这是列'tblPayees.PayeeName'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。

我知道为什么eeror发生但是,我不想按payeeName分组,我只需要payeecode。怎么做?    请帮帮我

1 个答案:

答案 0 :(得分:0)

问题是您需要在group by子句中包含该列,或者在MINMAX等选择列表中使用聚合,否则数据库引擎不会知道如何处理它,即从该组中选择什么值。

现在您确定无法对两个列进行分组吗?你可以为同一个PayeeCode使用不同的PayeeName吗?如果没有,您可以通过以下方式将其包括在内:

select PayeeCode, PayeeName from tblPayees group by PayeeCode, PayeeName

如果相同的PayeeCode的PayeeName可能不同,那么您需要通过聚合函数告诉数据库引擎您要选择哪个值:

select PayeeCode, Max(PayeeName) as PayeeName from tblPayees group by PayeeCode

甚至可以将逗号分隔列表中的PayeeName值连接起来,但我认为这超出了这个问题的范围。