2017-09-05 54 views
1

我在sql查询中使用了子查询。但不幸的是,当我尝试在列组中使用它时,我得到INVALID COLUMN错误。什么是解决方案?组中的子查询别名不工作无效的列错误

enter image description here

+0

您将此标签标记为'oracle',但使用类似'[dbo]。[tbl_VoucherType]''的语法。这不是Oracle语法。你确定你在使用Oracle吗?无论如何:至少在Oracle中,您不能在GROUP BY中创建仅在SELECT语句中创建的列。 'SELECT'仅在** GROUP BY之后评估**,而不是之前。所以 - 如果查询是正确的(通过查看查询是无法知道的),解决方案是在子查询中创建这个最新版本的'll',并在外部查询中对其进行分组。顺便说一句,用同一个别名命名很多事情是在寻求麻烦,你不应该这样做。 – mathguy

+0

其实我们**可以**告诉查询否则不正确,**如果**实际上您正在使用Oracle。关键字'AS'可以在Oracle列**别名(它是可选的,您可以使用它或省略它)之前在Oracle中使用,但是它在**表**别名之前是**禁止的。 – mathguy

+1

请阅读http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload-images-of-code-on-so-when-asking-a-question/285557和接受的答案 –

回答

3

你不需要在select子句再次读取tbl_AccountLedger数据,因为你已经拥有它通过joins(由相同的连接/状态),只是l.ledgerName更换您(select......) ll一部分这样

select l.ledgerName, sum(m.debit), sum (m.credit), 
    from tbl_LedgerPosting as m 
    left join [dbo].[tbl_VoucherType] as v on m.voucherTypeId=v.voucherTypeId 
    left join [dbo].[tbl_AccountLedger] as l on m.ledgerId=l.ledgerId 
group by v.coucherTypeName, m voucherNo, l.ledgerName 
order by v.coucherTypeName, m voucherNo