2012-06-03 2 views
0

작동하지 적용 좀 그룹화하지만 일부 필드 포함하지 않을 만들고 싶어 : 나는 포함하지 않는 필드는그룹에 의해 및 외부 다음 쿼리에

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를 사용 중입니다.

EDIT : "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 
... 
+0

그룹을보십시오 ...? –

+0

group by 절에 해당 값이 없으면 쿼리 그룹이 올바르게 그룹화되지만 행을 그룹화하지 않으면 추가됩니다. 이 필드에 집계 함수를 수행하고 싶지는 않습니다. –

+0

anouar204가 물었 듯이 최소값을 원하십니까? 또는 문자열에서 값을 연결하여 연결 하시겠습니까? –

답변

1

당신에게 너무 마녀 tg.nombre 및 tp.NombComp 값은 최소 최대 평균을 사용하는 wante 할 Groupe의 당 하나 개의 행을 줄 것이다하여이

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 
+0

고마워요. –

관련 문제