Sql server 2008 如何使用GROUP BY上的子查询/函数在SQL Server 2008 R2上执行查询

Sql server 2008 如何使用GROUP BY上的子查询/函数在SQL Server 2008 R2上执行查询,sql-server-2008,group-by,in-subquery,Sql Server 2008,Group By,In Subquery,当我执行此查询时,它工作正常: SELECT pr.pr_nombre , cl.cl_nomcorto, mc_cant * dbo.tipo_cambio(cr.mo_id,3,mc_fecha)/0.951 as Interes, mc_cant * dbo.tipo_cambio(cr.mo_id,3,mc_fecha)/0.951*.049 as WH, (select pr_id from dbo.nonplusultra(cr.pr_id) where pr_renew

当我执行此查询时,它工作正常:

SELECT     
pr.pr_nombre , cl.cl_nomcorto, 
mc_cant * dbo.tipo_cambio(cr.mo_id,3,mc_fecha)/0.951 as Interes,
mc_cant * dbo.tipo_cambio(cr.mo_id,3,mc_fecha)/0.951*.049 as WH,
(select pr_id from dbo.nonplusultra(cr.pr_id) where pr_renew_ref is null) as Agrupador
FROM   movcuentas mc
inner join corridas cr on mc.cr_id =  cr.cr_id
inner join clientes cl on cr.cl_id = cl.cl_id
inner join prestamos pr on cr.pr_id = pr.pr_id
WHERE     (mc_concepto = 'Amort Int') AND (tm_id = 3) AND MONTH(mc_fecha) = 2 AND YEAR(mc_fecha) = 2017 
ORDER BY pr.pr_nombre
我明白了:

现在,我需要在记录上添加列“interest”和“WH”,并使用相同的“Agrupador”,如下所示:

SELECT     
pr.pr_nombre , cl.cl_nomcorto, 
sum(mc_cant * dbo.tipo_cambio(cr.mo_id,3,mc_fecha)/0.951) as Interes,
sum(mc_cant * dbo.tipo_cambio(cr.mo_id,3,mc_fecha)/0.951*.049) as WH,
(select pr_id from dbo.nonplusultra(cr.pr_id) where pr_renew_ref is null) as Agrupador
FROM   movcuentas mc
inner join corridas cr on mc.cr_id =  cr.cr_id
inner join clientes cl on cr.cl_id = cl.cl_id
inner join prestamos pr on cr.pr_id = pr.pr_id
WHERE     (mc_concepto = 'Amort Int') AND (tm_id = 3) AND MONTH(mc_fecha) = 2 AND YEAR(mc_fecha) = 2017 
GROUP BY pr.pr_nombre , cl.cl_nomcorto, (select pr_id from dbo.nonplusultra(cr.pr_id) where pr_renew_ref is null)
ORDER BY pr.pr_nombre
我得到这个错误信息:

味精144,15级,状态1,第12行 无法在group by子句的group by列表所用的表达式中使用聚合或子查询


欢迎任何帮助。

您能在这里使用CTE吗

;WITH CTE as 
(
SELECT     
pr.pr_nombre , cl.cl_nomcorto, 
mc_cant * dbo.tipo_cambio(cr.mo_id,3,mc_fecha)/0.951 as Interes,
mc_cant * dbo.tipo_cambio(cr.mo_id,3,mc_fecha)/0.951*.049 as WH,
(select pr_id from dbo.nonplusultra(cr.pr_id) where pr_renew_ref is null) as Agrupador
FROM   movcuentas mc
inner join corridas cr on mc.cr_id =  cr.cr_id
inner join clientes cl on cr.cl_id = cl.cl_id
inner join prestamos pr on cr.pr_id = pr.pr_id
WHERE     (mc_concepto = 'Amort Int') AND (tm_id = 3) AND MONTH(mc_fecha) = 2 AND YEAR(mc_fecha) = 2017 
ORDER BY pr.pr_nombre
)
select pr_nombre,cl_nomcorto,sum(Interes),sum(WH),Agrupador
from CTE
group by pr_nombre,cl_nomcorto,Agrupador
order by pr_nombre

我不确定将该子查询放在
分组依据
列表中是否有意义。如果它是相关的,那么您应该在
SELECT
子句中将它包装在聚合函数中。如果它不相关,那么只需将其从
GROUP BY
中删除,因为它什么也不做。其思想是使用列“Agrupador”对具有相同值的行进行分组,在包含的数据结果中,它将为值为“731”的行添加“Interest”和“WH”,Hi Rajesh,它返回与原始查询完全相同的结果,它启动了,但不按“Agrupador”列分组。非常感谢。你是说CTE的结果不是按Agrupador分组的?你能分享一下快照吗?记录中的空白或其他东西一定有一些不同。嗨,Rajesh,事实上,记录中有一个空白使它无法正常工作,否则你建议的解决方案就像一个符咒。谢谢@罗兰多M,太棒了!!请把它标为答案。非常感谢。