日期:2014-05-17  浏览次数:20530 次

一个group by的问题

InSt_Amt=(select isnull(sum(x.Fc_tot), 0)
                        from StInPoOrdD x
                          inner join PoOrdD o on x.OrderD_Id = o.OrderD_Id where o.OrderM_Id = b.OrderM_Id)

如代码所示,我在存储过程中将此列查出,插入临时表,而且内表中也有聚合函数SUM,按理说应该不需要Group by,存储过程建立也是正确的,但是我只要一输入参数进行查询,就会报这个错:选择列表中的列 'StInPoOrdD.Fc_Tot' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。
请问这是为什么?内表中的列外表是无法访问的,所以也没有办法进行GROUP BY,求大神指教

------解决方案--------------------

InSt_Amt=(select isnull(sum(x.Fc_tot), 0)  as Fc_tot
                        from StInPoOrdD x
                          inner join PoOrdD o on x.OrderD_Id = o.OrderD_Id where o.OrderM_Id = b.OrderM_Id)

------解决方案--------------------

InSt_Amt=(select isnull(sum(x.Fc_tot), 0)
                        from StInPoOrdD x
                          inner join PoOrdD o on x.OrderD_Id = o.OrderD_Id where o.OrderM_Id = b.OrderM_Id)


这个应该是一个子查询,这个别名 b是从哪儿来的 b.OrderM_Id
------解决方案--------------------
1.把你里头的 “isnull(sum(x.Fc_tot), 0)” 这个列值,重新命名一个别名,就可以了。
2.如果你select语句中查询只有聚合函数,没有其他列的话,不用group  by,如果除了聚合函数,还有其他列,就要group by 了。
------解决方案--------------------
你那个报错通常是select/order by /having里面用到了一些没有在聚合函数中的列,把完整的语句贴出来看看
------解决方案--------------------
引用:
Quote: 引用:

要加入别名,不然列名为null

求教版主大大,那“InSt_Amt=”不算是指定了列的名吗?或者说你的意思是,那个子查询里面是没有列名的
结果集里面要指定,就想:
select *
from (xxxx)
这个会报错的,因为from它不直达括号里面的是一个什么东西
------解决方案--------------------
顶,我保证楼主会结贴的~