首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

一个group by的有关问题

2014-01-01 
一个group by的问题InSt_Amt(select isnull(sum(x.Fc_tot), 0)from StInPoOrdD xinner join PoOrdD o on

一个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它不直达括号里面的是一个什么东西
[解决办法]
顶,我保证楼主会结贴的~

热点排行