Estimados tengo una consulta la cual consiste en mostrar una lista de rendiciones de SAP en una consulta de SQL por ejemplo:
SELECT T0.[DocStatus] AS 'ESTADO_OC', T0.[DocNum] AS 'OC', T1.[BaseRef] 'NV', T1.[ItemCode], T1.[Dscription],
T1.[LineTotal] AS 'LINE_OC', T2.[LineTotal] AS 'LINEA_NV', T1.[OcrCode4] AS 'PERSO',
CASE WHEN T1.[TargetType]='-1' THEN 'NO_TIENE' WHEN T1.[TargetType]='18' THEN 'FACTURA' ELSE 'OTRO' END AS 'DESTINO',
CASE WHEN (T4.[DocTotal] <> T4.[PaidToDate] OR ISNULL (T4.[DocTotal], '0')=0) THEN 'NO_PAGADO' ELSE 'PAGADO' END AS 'STATUS_FC', T3.[PrcName]
FROM OPRC T3 INNER JOIN OPOR T0 INNER JOIN
POR1 T1 ON T0.[DocEntry] = T1.[DocEntry] INNER JOIN
RDR1 T2 ON T1.[BaseEntry] = T2.[DocEntry] AND T1.[BaseLine] = T2.[LineNum] ON
T3.[PrcCode] = T1.[OcrCode4] LEFT OUTER JOIN
OPCH T4 ON T1.[TrgetEntry] = T4.[DocEntry]
WHERE (T1.[BaseType]=17)
AND (T1.[BaseRef] LIKE '15%')
AND (T0.[CANCELED]='N')
AND ((CASE WHEN (T4.[DocTotal] <> T4.[PaidToDate] OR ISNULL (T4.[DocTotal],'0')=0) THEN 'NO_PAGADO' ELSE 'PAGADO' END) = 'NO_PAGADO')
La cual muestra una lista como la siguiente, quite una columnas que no me sirven:
# Estado OC OC NV Número Descripción DESTINO STATUS FC Nombre
1 O 6267 15000356 ADRE0001 REND./11111111 NO TIENE NO PAGADO Luis
2 C 6300 15000368 ADRE0004 RENDICION FACTURA NO PAGADO Ana
3 C 5278 15000224 ADRE0001 AUTOMATICOS NO TIENE NO PAGADO Daniel
Como podría hacer para que me elimine u oculte la tercera fila la cual tiene Estado C, Destino NO TIENE y Status FC NO PAGADO, mi problema es que este un un listado muy grande, acá solo deje los tres tipos de resultados que me muestra, favor su ayuda gracias solo deje los tres tipos de resultados que me muestra, favor su ayuda gracias
SELECT T0.[DocStatus] AS 'ESTADO_OC', T0.[DocNum] AS 'OC', T1.[BaseRef] 'NV', T1.[ItemCode], T1.[Dscription],
T1.[LineTotal] AS 'LINE_OC', T2.[LineTotal] AS 'LINEA_NV', T1.[OcrCode4] AS 'PERSO',
CASE WHEN T1.[TargetType]='-1' THEN 'NO_TIENE' WHEN T1.[TargetType]='18' THEN 'FACTURA' ELSE 'OTRO' END AS 'DESTINO',
CASE WHEN (T4.[DocTotal] <> T4.[PaidToDate] OR ISNULL (T4.[DocTotal], '0')=0) THEN 'NO_PAGADO' ELSE 'PAGADO' END AS 'STATUS_FC', T3.[PrcName]
FROM OPRC T3
INNER JOIN OPOR T0
INNER JOIN POR1 T1 ON T0.[DocEntry] = T1.[DocEntry]
INNER JOIN RDR1 T2 ON T1.[BaseEntry] = T2.[DocEntry] AND T1.[BaseLine] = T2.[LineNum] ON T3.[PrcCode] = T1.[OcrCode4]
LEFT OUTER JOIN OPCH T4 ON T1.[TrgetEntry] = T4.[DocEntry]
WHERE T1.[BaseType]=17
AND T1.[BaseRef] LIKE '15%'
AND T0.[CANCELED]='N'
AND ((T4.[DocTotal] <> T4.[PaidToDate]) OR (ISNULL(T4.[DocTotal],0)=0))
AND T0.[DocStatus] <> 'C'
AND T1.[TargetType]<>-1
Estimado gracias por atender a mi requerimiento, aplique tu consulta a mi base y esta no me entrego ningun resultado, pero al quitar el signo menos a la ultima linea donde dice -1 la deje en 1 y esta me entrego de resultado solo las filas que están con O, con No tiene y No pagado, lo cual es bueno solo faltaría aplicar que se muestre las que están en C, Factura y No pagado. favor tu ayuda gracias.
Disculpa, leí mal tu requerimiento, espero esto pueda ayudarte!
SELECT T0.[DocStatus] AS 'ESTADO_OC', T0.[DocNum] AS 'OC', T1.[BaseRef] 'NV', T1.[ItemCode], T1.[Dscription],
T1.[LineTotal] AS 'LINE_OC', T2.[LineTotal] AS 'LINEA_NV', T1.[OcrCode4] AS 'PERSO',
CASE WHEN T1.[TargetType]='-1' THEN 'NO_TIENE' WHEN T1.[TargetType]='18' THEN 'FACTURA' ELSE 'OTRO' END AS 'DESTINO',
CASE WHEN (T4.[DocTotal] <> T4.[PaidToDate] OR ISNULL (T4.[DocTotal], '0')=0) THEN 'NO_PAGADO' ELSE 'PAGADO' END AS 'STATUS_FC', T3.[PrcName]
FROM OPRC T3
INNER JOIN OPOR T0
INNER JOIN POR1 T1 ON T0.[DocEntry] = T1.[DocEntry]
INNER JOIN RDR1 T2 ON T1.[BaseEntry] = T2.[DocEntry] AND T1.[BaseLine] = T2.[LineNum] ON T3.[PrcCode] = T1.[OcrCode4]
LEFT OUTER JOIN OPCH T4 ON T1.[TrgetEntry] = T4.[DocEntry]
WHERE T1.[BaseType]=17
AND (T1.[BaseRef] LIKE '15%')
AND (T0.[CANCELED]='N')
AND ((T4.[DocTotal] <> T4.[PaidToDate]) OR (ISNULL(T4.[DocTotal],0)=0))
AND T1.[TargetType] = 18
Esto debería traerte todos los registros independientemente del estado (O, C) que tengan factura (TargetType = 18) y que no han sido pagadas ((T4.[DocTotal] <> T4.[PaidToDate]) OR (ISNULL(T4.[DocTotal],0)=0)).
ok, entonces creo que puedes hacer una unión con ambas consultas, algo así como:
SELECT T0.[DocStatus] AS 'ESTADO_OC', T0.[DocNum] AS 'OC', T1.[BaseRef] 'NV', T1.[ItemCode], T1.[Dscription],
T1.[LineTotal] AS 'LINE_OC', T2.[LineTotal] AS 'LINEA_NV', T1.[OcrCode4] AS 'PERSO',
CASE WHEN T1.[TargetType]='-1' THEN 'NO_TIENE' WHEN T1.[TargetType]='18' THEN 'FACTURA' ELSE 'OTRO' END AS 'DESTINO',
CASE WHEN (T4.[DocTotal] <> T4.[PaidToDate] OR ISNULL (T4.[DocTotal], '0')=0) THEN 'NO_PAGADO' ELSE 'PAGADO' END AS 'STATUS_FC', T3.[PrcName]
FROM OPRC T3
INNER JOIN OPOR T0
INNER JOIN POR1 T1 ON T0.[DocEntry] = T1.[DocEntry]
INNER JOIN RDR1 T2 ON T1.[BaseEntry] = T2.[DocEntry] AND T1.[BaseLine] = T2.[LineNum] ON T3.[PrcCode] = T1.[OcrCode4]
LEFT OUTER JOIN OPCH T4 ON T1.[TrgetEntry] = T4.[DocEntry]
WHERE T1.[BaseType]=17
AND T1.[BaseRef] LIKE '15%'
AND T0.[CANCELED]='N'
AND ((T4.[DocTotal] <> T4.[PaidToDate]) OR (ISNULL(T4.[DocTotal],0)=0))
AND T0.[DocStatus] <> 'C'
AND T1.[TargetType]<>1
UNION ALL
SELECT T0.[DocStatus] AS 'ESTADO_OC', T0.[DocNum] AS 'OC', T1.[BaseRef] 'NV', T1.[ItemCode], T1.[Dscription],
T1.[LineTotal] AS 'LINE_OC', T2.[LineTotal] AS 'LINEA_NV', T1.[OcrCode4] AS 'PERSO',
CASE WHEN T1.[TargetType]='-1' THEN 'NO_TIENE' WHEN T1.[TargetType]='18' THEN 'FACTURA' ELSE 'OTRO' END AS 'DESTINO',
CASE WHEN (T4.[DocTotal] <> T4.[PaidToDate] OR ISNULL (T4.[DocTotal], '0')=0) THEN 'NO_PAGADO' ELSE 'PAGADO' END AS 'STATUS_FC', T3.[PrcName]
FROM OPRC T3
INNER JOIN OPOR T0
INNER JOIN POR1 T1 ON T0.[DocEntry] = T1.[DocEntry]
INNER JOIN RDR1 T2 ON T1.[BaseEntry] = T2.[DocEntry] AND T1.[BaseLine] = T2.[LineNum] ON T3.[PrcCode] = T1.[OcrCode4]
LEFT OUTER JOIN OPCH T4 ON T1.[TrgetEntry] = T4.[DocEntry]
WHERE T1.[BaseType]=17
AND (T1.[BaseRef] LIKE '15%')
AND (T0.[CANCELED]='N')
AND ((T4.[DocTotal] <> T4.[PaidToDate]) OR (ISNULL(T4.[DocTotal],0)=0))
AND T1.[TargetType] = 18