Resulta que estoy generando un informe por el Query manager, la idea es que me sque el listado de los empleados de la alcaldía desde la tabla odln y ademas hay una tabla [dbo].[@PET_EMPLE_MUNICIPIO] de la cual voy a mostrar el tipo de vinculacion que tiene dicho empleado.
Cuando ejecuto el Query me saca un error en la subconsulta que dice que"ha devuelto mas de un valor, lo que no es correcto", si lo ejecuto sin la subconsulta si me funciona.
Este es el código.
SELECT t0.docdate,u_idcliente,t0.cardname 'Nombre Empleado',
(select U_vinculacion from [dbo].[@PET_EMPLE_MUNICIPIO] where u_cedula=u_idcliente) 'Vinculacion',t0.u_secretaria 'Secretaria',t0.u_telcliente,t1.quantity,
(case t1.itemcode when '13' then 'Explora' else 'Planetario' end) 'Boletas'
FROM Odln T0 inner join dln1 t1 on (t0.docentry=t1.docentry)
where t1.itemcode in ('13','32')
and t1.U_LISTA_PRECIOS in ('22') and t0.docdate between '01/06/2018' and '30/06/2018'
Esta es la consulta que se muestra sin la subconsulta
Para poder utilizar una subconsulta, es necesario que esta sub consulta te envíe un solo valor y como tu sub consulta esta mandando más de una fila no la puedes utilizar.
Sería mejor que ejecutaras primero tu consulta y veas porque te manda más de una fila, quiza estas usando la llave equivocada o quizá tengas más de una cédula por cada cliente. Saludos!
Efectivamente en la consulta por cada cliente me arroja mas de una cédula, pero entonces el tema es que ese campo es el que tengo para poder comparar en el where de la subconsulta, no sabría como mas llevarle los datos de la vinculación a la consulta como tal.
Hola Villa
Debes utilizar una funcion top, max, min U_vinculacion en la subconsulta o modificar el query de la siguiente manera.
SELECT T0.DocDate, U_idcliente, T0.CardName 'Nombre Empleado', T1.Quantity,
T9.U_vinculacion 'Vinculacion', T0.U_secretaria 'Secretaria',T0.U_telcliente,
CASE T1.ItemCode WHEN '13' THEN 'Explora' ELSE 'Planetario' END 'Boletas'
FROM ODLN T0
INNER JOIN DLN1 T1 ON T0.DocEntry=T1.DocEntry
LEFT JOIN
(SELECT U_cedula, U_vinculacion FROM [@PET_EMPLE_MUNICIPIO] ) T9
ON T9.U_cedula = U_idcliente
WHERE T1.ItemCode IN ('13','32') AND T1.U_LISTA_PRECIOS IN ('22')
AND T0.DocDate BETWEEN '01/06/2018' AND '30/06/2018'
Funcionó tal cual de las dos formas lo probé y ando de joya, con el top me saca el listado y con tu consulta igual.
Lo único es que con el left join me saca dos lineas adicionales que en la del top no me muestra, osea con top me muestra 100 registros y con el left join me muestra 102 registros.