2012-06-03 25 views
0

我想做出一些分組,但不希望包括一些字段:GROUP BY和OUTER APPLY不是在下面的查詢工作

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服務器2008年快遞

編輯:我會展示一些例子,如果我「ISNULL(tg.nombre,tp.NombComp)作爲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

組會給你每GROUPE所以女巫tg.nombre和tp.NombComp值時,才萬特使用MIN MAX AVG一行...? –

+0

如果在group by子句中沒有這些值,則查詢將正確分組,但是如果我添加的行未分組。我不想在這些字段上執行聚合函數,只顯示它們 –

+0

正如anouar204所問,你是否想要min,max?或者,您是否希望將字符串中的值連接起來? –

回答

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

謝謝你的工作 –