分组和外部申请不起作用

时间:2012-06-03 22:18:04

标签: sql sql-server-2008 group-by

在以下查询中我想进行一些分组,但不想包含一些字段:

SELECT C.id_credito, SUM(M.monto), M.fecha_mov, ISNULL(tg.nombre, tp.NombComp) AS Acreditados
FROM movimientos AS M
JOIN acreditados AS A ON A.id_acreditado = M.id_acreditado
JOIN creditos AS C ON C.id_credito = A.id_credito
JOIN cargos AS CA ON CA.id_movimiento = M.id_movimiento
OUTER APPLY (SELECT TOP 1 G.nombre FROM grupos G JOIN agrupaciones AG on AG.id_grupo = G.id_grupo WHERE AG.id_acreditado = A.id_acreditado) tg
OUTER APPLY (SELECT TOP 1 P.nombres+' '+P.apellido_paterno+' '+P.apellido_materno AS NombComp  FROM personas P WHERE P.id_persona = A.id_persona) tp
WHERE M.tipo_mov = 0 AND M.fecha_mov < DATEADD(day, 14, GETDATE()) AND CA.tipo_cargo = 0
GROUP BY C.id_credito, M.fecha_mov

我不想包含的字段是tg.nombre和tp.NombComp,因为当我包含它们时,字段没有正确分组。但是,如果我不将它们放在GROUP BY子句中,我会收到以下错误:

列'tp.NombComp'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。

你能帮帮我吗?我正在使用SQL server 2008 express

编辑:我将展示一些示例,如果我从查询中删除“ISNULL(tg.nombre,tp.NombComp)AS Acreditados”,则分组工作正常,因为您可以通过id_credito然后通过fecha_mov查看第一组

id_credito monto        fecha_mov
84     1875.00  2012-06-07
89     1875.00   2012-06-11
94     739.58   2012-06-11
85     2338.00  2012-06-14
.....

但如果我将以前的字段添加到GROUP BY子句中,则分组无法按预期工作。

SELECT C.id_credito, SUM(M.monto), M.fecha_mov, ISNULL(tg.nombre, tp.NombComp) AS Acreditados
FROM movimientos AS M
JOIN acreditados AS A ON A.id_acreditado = M.id_acreditado
JOIN creditos AS C ON C.id_credito = A.id_credito
JOIN cargos AS CA ON CA.id_movimiento = M.id_movimiento
OUTER APPLY (SELECT TOP 1 G.nombre FROM grupos G JOIN agrupaciones AG on AG.id_grupo = G.id_grupo WHERE AG.id_acreditado = A.id_acreditado) tg
OUTER APPLY (SELECT TOP 1 P.nombres+' '+P.apellido_paterno+' '+P.apellido_materno AS NombComp  FROM personas P WHERE P.id_persona = A.id_persona) tp
WHERE M.tipo_mov = 0 AND M.fecha_mov < DATEADD(day, 14, GETDATE()) AND CA.tipo_cargo = 0
GROUP BY C.id_credito, M.fecha_mov, tg.nombre, tp.NombComp
id_credito   monto      fecha_mov       Acreditados
84       625.00 2012-06-07  Politos
84       729.17 2012-06-07  Politos
84       520.83 2012-06-07  Politos
85       584.50 2012-06-14  Acuna
85       584.50 2012-06-14  Acuna
85       584.50 2012-06-14  Acuna
85       584.50 2012-06-14  Acuna
86       584.50 2012-06-14  Estrellas de Cuatro Vientos
86       584.50 2012-06-14  Estrellas de Cuatro Vientos
86       584.50 2012-06-14  Estrellas de Cuatro Vientos
86       584.50 2012-06-14  Estrellas de Cuatro Vientos
...

1 个答案:

答案 0 :(得分:1)

试试这个

  SELECT C.id_credito, SUM(M.monto), M.fecha_mov,  
  ISNULL(min(tg.nombre),min(tp.NombComp)) AS Acreditados
  .
  . 
  .
  GROUP BY C.id_credito, M.fecha_mov