cancel
Showing results for 
Search instead for 
Did you mean: 

Consulta con UNION ALL y Group By de dos subconsultas

Former Member
0 Kudos

Buenas tardes,

Estoy haciendo una consulta, de la cual os pongo un ejemplo porque es mucho mas compleja, para ver si me podeis ayudar:

Select T.CardName AS 'Nombre Cliente', SUM(T.DocTotal)AS 'Suma Total Neto'

from

(

SELECT

CardName AS 'Nombre Cliente',

DocTotal AS 'Total Neto'

FROM

OINV

WHERE CardName ='VIAJES TIME TRAVEL CT'

UNION ALL

SELECT

CardName AS 'Nombre Cliente',

-DocTotal AS 'Total Neto'

FROM ORIN

WHERE CardName ='VIAJES TIME TRAVEL CT'

) T

GROUP BY T.CardName

Me da el siguiente mensaje de error:

Msg 207, Level 16, State 1, Line 25. Invalid column name 'CardName'.

Msg 207, Level 16, State 1, Line 2.Invalid column name 'CardName'.

Msg 207, Level 16, State 1, Line 2.Invalid column name 'DocTotal'.

¿Alguien me podria ayudar como tengo que hacer para hacer esta Consulta de la union de otras 2 subconsultas?

Muchas Gracias

Accepted Solutions (1)

Accepted Solutions (1)

former_member188440
Active Contributor
0 Kudos

Lo que sucede es que al hacer el select * from T, estas utilizando el nombre de los campos (cardname, etc), lo que debes hacer es utilizar T.[Alias del campo] pues, estas utilizando alias en los querys unidos por el UNION

INTENTA

Select T.Nombre Cliente, SUM (T.Total Neto )AS 'Suma Total Neto'

from

(

SELECT

CardName AS 'Nombre Cliente',

DocTotal AS 'Total Neto'

FROM

OINV

WHERE CardName ='VIAJES TIME TRAVEL CT'

UNION ALL

SELECT

CardName AS 'Nombre Cliente',

-DocTotal AS 'Total Neto'

FROM ORIN

WHERE CardName ='VIAJES TIME TRAVEL CT'

) T

GROUP BY T.CardName

Answers (2)

Answers (2)

former_member188440
Active Contributor
0 Kudos

Lo que sucede es que al hacer el select * from T, estas utilizando el nombre de los campos (cardname, etc), lo que debes hacer es utilizar T.[Alias del campo] pues, estas utilizando alias en los querys unidos por el UNION

INTENTA

Select T.Nombre Cliente, SUM (T.Total Neto )AS 'Suma Total Neto'

from

(

SELECT

CardName AS 'Nombre Cliente',

DocTotal AS 'Total Neto'

FROM

OINV

WHERE CardName ='VIAJES TIME TRAVEL CT'

UNION ALL

SELECT

CardName AS 'Nombre Cliente',

-DocTotal AS 'Total Neto'

FROM ORIN

WHERE CardName ='VIAJES TIME TRAVEL CT'

) T

GROUP BY T.CardName

Former Member
0 Kudos

Muchas gracias,

has dado en el clavo era lo que yo estaba buscando.

Lo unico para que me funcione he tenido que poner el guion bajo en los alias de esta manera:

"Nombre_Cliente" en vez de "Nombre Cliente" y funciona perfectamente.

Un saludo.

former_member210784
Active Contributor
0 Kudos

Hola.

O también encerrar entre corchetes cuadrados el nombre original, así:

 [Nombre Cliente] 

Saludos.

Former Member
0 Kudos

Hola...

No entiendo muy bien cual es el resultado final que se espera..., sin embargo, aquí van 2 ejemplos para su análisis..

Este query es más detallado...

SELECT T0.CardName AS 'Nombre Cliente', T0.DocTotal AS 'Total Neto' FROM OINV T0 WHERE T0.CardName = 'VIAJES TIME TRAVEL CT'

UNION ALL

SELECT T1.CardName AS 'Nombre Cliente', T1.DocTotal * -1 AS 'Total Neto' FROM ORIN T1 WHERE T1.CardName = 'VIAJES TIME TRAVEL CT'

Este otro te agrupa en función del tipo de documento..

SELECT DISTINCT T0.CardName AS 'Nombre Cliente', SUM(T0.DocTotal) AS 'Total Neto' FROM OINV T0 WHERE T0.CardName = 'VIAJES TIME TRAVEL CT'
GROUP BY T0.CardName

UNION ALL

SELECT DISTINCT T1.CardName AS 'Nombre Cliente', SUM(T1.DocTotal * -1) AS 'Total Neto' FROM ORIN T1 WHERE T1.CardName = 'VIAJES TIME TRAVEL CT'
GROUP BY T1.CardName

Espero te sea de ayuda,

Saludos Cordiales,

Former Member
0 Kudos

Muchas Gracias por tu respuesta, pero no me has entendio bien , yo me referia ha hacer una agrupacion del total de la Query,

Muchas gracias por tu respuesta.