SQL - SQL Problemas con UNION

 
Vista:

SQL Problemas con UNION

Publicado por Javier (1 intervención) el 04/08/2006 20:23:06
Hola, Tengo el siguiente problema, al intenear ejecutar una consunta en al
analizador de condultas me devuelve el siguiente error:
Servidor: mensaje 104, nivel 15, estado 1, línea 5

La consulta es algo así:
Select * from (... consulta compleja...) T1
UNION
Select * from (...Consulta selncilla...) T2
ORDER BY 1

Muchas Gracias.

Javier Centurión
Argentina

Para más detalles les transcribo la consulta real:

declare @Med_ID as INT, @fecHasta as datetime
set @Med_ID = 670
set @fecHasta = '01/07/2006'

SELECT * FROM (
SELECT Tur_ID = CAST(Tur_Turnos.Tur_ID AS INT),
Pac_ID = CAST(PMC_Pacientes.Pac_ID AS INT),
Paciente = CAST(PMC_Pacientes.Pac_Apellido + ISNULL(', ' +
PMC_Pacientes.Pac_Nombre, '') AS Varchar(50)),
Cons_Descripcion = CAST(Tur_Turnos.Tur_Cons_Descripcion AS Varchar(99)),
NombreDia = CAST(DATENAME(dw, Tur_Turnos.Tur_Fecha) AS Varchar(15)),
Tur_Fecha = CAST(Tur_Turnos.Tur_Fecha AS Varchar(50)),
Os_Descripcion = CAST(PMC_ObrasSociales.Os_Descripcion AS Varchar(99)),
Tur_NomencCodigo = CAST(Tur_Turnos.Tur_NomencCodigo AS Varchar(15)),
Cantidad = CAST(1 AS INT),
Medico = CAST(PMC_Medicos.Med_Apellido + ISNULL(', ' +
PMC_Medicos.Med_Nombre, '') AS Varchar(50)),
Log_Operador = CAST(Operador.Log_Operador AS Varchar(50))
FROM Tur_Turnos
INNER JOIN PMC_Medicos ON Tur_Turnos.Tur_Med_NumeroInterno_Atiende =
PMC_Medicos.Med_NumeroInterno
INNER JOIN PMC_Pacientes ON Tur_Turnos.Pac_ID = PMC_Pacientes.Pac_ID
INNER JOIN PMC_ObrasSociales ON Tur_Turnos.Os_ID = PMC_ObrasSociales.Os_ID
INNER JOIN (
SELECT Tur_ID, Log_ID, Log_Operador
FROM Tur_LogUser T1 WHERE
(T1.Log_Tur_Presentismo=convert(bit, 1))
AND NOT EXISTS (SELECT Log_ID FROM Tur_LogUser T2 WHERE (T2.Tur_ID =
T1.Tur_ID) AND (T2.Log_Tur_Presentismo=convert(bit, 0)) AND
(T2.Log_ID>T1.Log_ID))
AND 0 = IsNull((SELECT TOP 1 Log_Tur_Presentismo FROM Tur_LogUser T2
WHERE (T2.Tur_ID = T1.Tur_ID) AND T2.Log_ID<T1.Log_ID ORDER BY Log_ID DESC),
0)
) Operador ON Tur_Turnos.Tur_ID = Operador.Tur_ID
WHERE ((PMC_Medicos.Med_ID = @Med_ID) AND (Tur_Turnos.Tur_Presentismo =
convert(bit, 1)) AND (Tur_Turnos.Tur_Fecha > convert(datetime, @fecHasta,
103)))
) T1

UNION ALL

SELECT * FROM (
SELECT Tur_ID = CAST(Tur_ID AS INT),
Pac_ID = CAST(0 AS INT),
Paciente = CAST('' AS Varchar(50)),
Cons_Descripcion = CAST('' AS Varchar(99)),
NombreDia = CAST('' AS Varchar(15)),
Tur_Fecha = CAST('' AS Varchar(50)),
Os_Descripcion = CAST('' AS Varchar(99)),
Tur_NomencCodigo = CAST(Tur_NomencCodigo AS Varchar(15)),
Cantidad = CAST(TPr_Cantidad AS Varchar(15)),
Medico = CAST('' AS Varchar(50)),
Log_Operador = CAST('' AS Varchar(50))
FROM Tur_Turnos_MasPracticas
WHERE (Tur_ID IN (
SELECT Tur_ID FROM Tur_Turnos
INNER JOIN PMC_Medicos ON Tur_Turnos.Tur_Med_NumeroInterno_Atiende =
PMC_Medicos.Med_NumeroInterno
WHERE (PMC_Medicos.Med_ID = @Med_ID) AND (Tur_Turnos.Tur_Presentismo =
convert(bit, 1)) AND (Tur_Turnos.Tur_Fecha > convert(datetime, @fecHasta,
103))
))
) T2
ORDER BY 1
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:SQL Problemas con UNION

Publicado por Jose luis (1 intervención) el 04/08/2006 20:37:49
Javier cuando hacer union o union all entre dos consultas la cantidad y los tipos de campos deberen ser los mismos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:SQL Problemas con UNION

Publicado por Javier (1 intervención) el 04/08/2006 21:50:30
Joséi, las dos subconsultas tienen la misma cantidad e columnas y las mismas
son del mismo tipo de datos; fijate:

SELECT * FROM (
SELECT
col 1 Tur_ID = CAST(Tur_Turnos.Tur_ID AS INT),
col 2 Pac_ID = CAST(PMC_Pacientes.Pac_ID AS INT),
col 3 Paciente = CAST(PMC_Pacientes.Pac_Apellido + ISNULL(', ' +
PMC_Pacientes.Pac_Nombre, '') AS Varchar(50)),
col 4 Cons_Descripcion = CAST(Tur_Turnos.Tur_Cons_Descripcion
AS Varchar (99)),
col 5 NombreDia = CAST(DATENAME(dw, Tur_Turnos.Tur_Fecha) AS
Varchar(15)),
col 6 Tur_Fecha = CAST(Tur_Turnos.Tur_Fecha AS Varchar(50)),
col 7 Os_Descripcion = CAST(PMC_ObrasSociales.Os_Descripcion
AS Varchar(99)),
col 8 Tur_NomencCodigo = CAST(Tur_Turnos.Tur_NomencCodigo AS
Varchar(15)),
col 9 Cantidad = CAST(1 AS INT),
col 10 Medico = CAST(PMC_Medicos.Med_Apellido + ISNULL(', ' +
PMC_Medicos.Med_Nombre, '') AS Varchar(50)),
col 11 Log_Operador = CAST(Operador.Log_Operador AS
Varchar(50))
FROM Tur_Turnos ....
) T1

UNION ALL

SELECT * FROM (
SELECT
col 1 Tur_ID = CAST(Tur_ID AS INT),
col 2 Pac_ID = CAST(0 AS INT),
col 3 Paciente = CAST('' AS Varchar(50)),
col 4 Cons_Descripcion = CAST('' AS Varchar(99)),
col 5 NombreDia = CAST('' AS Varchar(15)),
col 6 Tur_Fecha = CAST('' AS Varchar(50)),
col 7 Os_Descripcion = CAST('' AS Varchar(99)),
col 8 Tur_NomencCodigo = CAST(Tur_NomencCodigo AS Varchar(15)),
col 9 Cantidad = CAST(TPr_Cantidad AS Varchar(15)),
col 10 Medico = CAST('' AS Varchar(50)),
col 11 Log_Operador = CAST('' AS Varchar(50))
FROM Tur_Turnos_MasPracticas ....
) T2
ORDER BY 1

Cada una de las dos subconsultas tienen 11 columas

¿Que podrá ser?

Saludos

Javier
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:SQL Problemas con UNION

Publicado por marbella (1 intervención) el 04/08/2006 23:24:13
aki me pareses k te lias un poko, kita kolunas y ya esta´
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:SQL Problemas con UNION

Publicado por Isaías (5072 intervenciones) el 05/08/2006 01:05:03
¿Cual es el TEXTO el mensaje del error?, solo nos mandas los numeros...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:SQL Problemas con UNION

Publicado por Jaime Panta (1 intervención) el 10/10/2006 19:30:55
Felicitaciones por tu consulta, es pequeña
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar