tengo una consulta que es para saber los estado en que se encuentran los pedidos desde que se hace la oferta hasta la factura y su entrega al cliente
pero no he podido con una parte de la consulta que es en donde se define el estado los estados son:
‘1.Por Aprobar’
‘2.Aprobado’
‘3.Ingresado’
‘4.Alistado’
‘5.Empacado’
‘6.En Cargue’
estos estado yo los defino en la consulta con un (SELECT CASE WHEN ,THEN)
Todo sale bien hasta el estado 3 , pero cuando vamos para el estado 4 este no sale … entonces no se que me falta para poder poner los demás estados
yo creería que es por los tipos de datos por que hasta el estado 3 los datos son de tipo fecha … y de hay en adelante ya son datos tipo alfanumérico creo que es eso
ojala me puedan ayudar con esta consulta… hay dejo el código para que lo puedan revisar
SELECT distinct
t0.cardname as 'Cliente',
CASE
WHEN T0.DocDate >0 and t2.DocDate IS NULL and t4.DocDate IS NULL THEN '1.Por Aprobar'
WHEN T0.DocDate >0 and t2.DocDate >0 and t4.DocDate IS NULL THEN '2.Aprobado'
--WHEN T0.DocDate >0 and t2.DocDate >0 and t4.DocDate >0 THEN '3.Ingresado'
WHEN T0.DocDate >0 and t2.DocDate >0 and t4.DocDate >0 and t4.U_ciudad_Fact between 1 and 20 THEN '4.Alistado'
-- WHEN T0.DocDate >0 and t2.DocDate >0 and t4.DocDate >0 and t4.U_ciudad_Fact >0 and t4.U_Empacado >0 THEN '5.Empacado'
--WHEN T0.DocDate >0 and t2.DocDate >0 and t4.DocDate >0 and t4.U_ciudad_Fact >0 and t4.U_Empacado >0 t4.U_MedioDespacho >0 THEN '6.En Cargue'
ELSE 'Sin Definirrrrr' END AS 'Estado General',
T0.DocDate as 'Fecha Oferta',
--t0.U_Pendiente_Por as 'Oferta Pendiente Por',
t2.DocDate as 'Fecha Orden',
T2.DocNum as 'No.Orden',
CASE WHEN t4.DocDate >0 THEN '' ELSE t2.U_Observa END AS 'Pendiente por Alistamiento',
t4.DocDate as 'Fecha Factura',
T4.DocNum as 'No.Factura',
t4.U_Fecha_Despacho as 'Fecha Despacho',
t4.U_Num_Guia as 'No. guia',
t6.Name as 'Transportadora'
FROM
OQUT as T0 LEFT JOIN
RDR1 as T1 ON T0.DocEntry = T1.BaseEntry left JOIN
ORDR as T2 ON T1.DocEntry = T2.DocEntry left JOIN
INV1 as T3 ON T3.BaseEntry=T2.DocEntry AND T3.BaseType='17' left JOIN
OINV as T4 ON T4.DocEntry=T3.DocEntry left JOIN
OSLP as T5 ON T5.SlpCode=T0.SlpCode left JOIN
[dbo].[@TRANSPORTADORAS] as T6 ON T4.[U_TRANSPORT] = T6.[Code]
where T0.Docdate >= '08/05/2020' and T0.CANCELED = 'N' AND T2.[CANCELED]= 'N' order by T0.DocDate desc
cuando haces un Case para distintos valores TODOS deben ser el mismo tipo de datos.
No puedes hacer una consulta de tipo Case y que si es un resultado te de una fecha, y con otro resultado te de un texto o un número por ejemplo. Recuerda que para la consulta aunque sean muchos “case” al final es 1 solo campo y debe de estar definido de 1 solo tipo.
Ahora bine. por lo que veo el resultado de todas es un texto.
En el 4 intenta cambiar el Between por 2 consultas separadas, una > Fecha and < Fecha
ose me ocurre si se hacen 2 campos … que opina ?? lo hice pero ahora el segundo campo no me coje y eso que el tipo de datos es igual
SELECT distinct
t0.cardname as 'Cliente',
CASE
WHEN T0.DocDate >0 and t2.DocDate IS NULL and t4.DocDate IS NULL THEN '1.Por Aprobar'
WHEN T0.DocDate >0 and t2.DocDate >0 and t4.DocDate IS NULL THEN '2.Aprobado'
WHEN T0.DocDate >0 and T2.DocDate >0 and T4.DocDate >0 THEN '3.Ingresado'
ELSE 'Error en Trazabilidad' END AS 'Estado(1,2,3)',
CASE
WHEN T4.U_ciudad_Fact >0 AND t4.U_Empacado IS NULL and t4.U_MedioDespacho IS NULL THEN '4.Alistado'
WHEN T4.U_ciudad_Fact >0 and t4.U_Empacado >0 and t4.U_MedioDespacho IS NULL THEN '5.Empacado'
WHEN T4.U_ciudad_Fact >0 and t4.U_Empacado >0 and t4.U_MedioDespacho <>'' THEN '6.En Cargue'
ELSE '' END AS 'Despacho',
T0.DocDate as 'Fecha Oferta',
--t0.U_Pendiente_Por as 'Oferta Pendiente Por',
t2.DocDate as 'Fecha Orden',
--T2.DocNum as 'No.Orden',
--CASE WHEN t4.DocDate >0 THEN '' ELSE t2.U_Observa END AS 'Pendiente por Alistamiento',
t4.DocDate as 'Fecha Factura',
t4.U_ciudad_Fact AS 'Alistado por',
t4.U_Empacado as 'Empacado por',
T4.U_MedioDespacho as 'MedioDespacho',
T4.DocNum as 'No.Factura',
--t4.U_Fecha_Despacho as 'Fecha Despacho',
--t4.U_Num_Guia as 'No. guia',
t6.Name as 'Transportadora'
FROM
OQUT as T0 LEFT JOIN
RDR1 as T1 ON T0.DocEntry = T1.BaseEntry left JOIN
ORDR as T2 ON T1.DocEntry = T2.DocEntry left JOIN
INV1 as T3 ON T3.BaseEntry=T2.DocEntry AND T3.BaseType='17' left JOIN
OINV as T4 ON T4.DocEntry=T3.DocEntry left JOIN
OSLP as T5 ON T5.SlpCode=T0.SlpCode left JOIN
[dbo].[@TRANSPORTADORAS] as T6 ON T4.[U_TRANSPORT] = T6.[Code]
where T0.Docdate >= '8/05/2020' and T0.CANCELED = 'N' AND T2.[CANCELED]= 'N' order by T0.DocDate desc