我是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。怎么做? 请帮帮我
答案 0 :(得分:0)
问题是您需要在group by
子句中包含该列,或者在MIN
,MAX
等选择列表中使用聚合,否则数据库引擎不会知道如何处理它,即从该组中选择什么值。
现在您确定无法对两个列进行分组吗?你可以为同一个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值连接起来,但我认为这超出了这个问题的范围。