Espero que puedan apoyarme con un query, donde me muestre por orden de venta el articulo que se capturo, pero necesito como filtro todos los ItemCode que empiecen con 01 pero que no tengan en la misma orden de venta los ItemCode que empiecen con 03. En la mayoria de nuestras ordenes de venta se capturan articulos que empiezan con 01 y 03, pero me han solicitado pasar un listado de las ordenes de venta donde no se haya capturado el 03, he sacado un reporte simple donde muestra el detalle por Orden de Venta y tuve que filtrarlo en excel, pero necesitan este query de forma fija.
Espero haberme explicado
De antemano agradezco el apoyo que puedan brindarme
Hola @america, por lo que dices que tienes el Query del detalle de las Órdenes de Venta, ya lo que te falta creo es muy simple.
Hablando de SQL, o del Query Manager de SAP, puedes usar la función LIKE/NOT LIKE para buscar coincidencias que no sean exactas. Es decir, quieres las órdenes donde no se hayan capturado productos que inicien su código con 03, por lo que podrías poner una condición que sea:
SELECT …
FROM …
WHERE ItemCode NOT LIKE ‘03%’
El NOT LIKE buscará todo lo que no coincida con lo que le indiques, y el símbolo de porcentaje en 03% indica que buscas coincidencias que inicien con 03 y después tengan cualquier otra cosa.
Ojo, esto te va a filtrar solo por linea, es decir que te va a seguir mostrando lineas de OV que incluyan ese artículo. Como en tu caso deseas que no se vea ninguna linea de dichas OV, yo lo que haría sería que la condición fuera un subquery donde obtenga todos los DocEntry de las OV que tienen ese artículo:
SELECT DISTINCT
DocEntry
FROM RDR1
WHERE ItemCode NOT LIKE ‘03%’
Y eso iría en el Query que ya tienes armado como condición:
SELECT
… tu query
FROM
… las tablas que usas
WHERE
… condiciones que ya tengas
AND
DocEntry IN (SELECT DISTINCT DocEntry FROM RDR1 WHERE ItemCode NOT LIKE ‘03%’)
¿Por qué no lo pruebas y nos comentas si resulta? Creo que con el query que mencionas tener ya cuentas con el 90% del trabajo previamente resuelto
Hola @JonathanAzael Gracias por tu respuesta, intentaré con el subquery, lo unico que habia intentado es con el el LIke, pero obtenía como resultado el 01 o 03, mas no me muestra los que NO tienen el 03.
Intento y te comento
He intentado con la opción que me proporcionas, pero no se cumplen las condiciones
SELECT T0.[DocNum], T0.[CANCELED], T0.[DocDate], T1.[ItemCode], T1.[Dscription], T1.[Quantity], T2.[USER_CODE]
FROM
ORDR T0 INNER JOIN RDR1 T1 ON T0.[DocEntry] = T1.[DocEntry]
INNER JOIN OUSR T2 ON T0.[UserSign] = T2.[USERID]
where T1.ItemCode LIKE '01%' and t0.DocEntry
IN (SELECT DISTINCT DocEntry FROM RDR1 WHERE ItemCode NOT LIKE '03%')
Buen día @america hice la prueba con el query que proporcionas, y en mi caso si respeta los criterios.
SELECT
T0.[DocNum], T0.[CANCELED], T0.[DocDate], T1.[ItemCode], T1.[Dscription], T1.[Quantity], T2.[USER_CODE]
FROM
ORDR T0
INNER JOIN RDR1 T1 ON T0.[DocEntry] = T1.[DocEntry]
INNER JOIN OUSR T2 ON T0.[UserSign] = T2.[USERID]
WHERE
T1.ItemCode LIKE 'A01%'
AND T0.DocEntry IN (SELECT DISTINCT DocEntry FROM RDR1 WHERE ItemCode NOT LIKE 'A03%')
ORDER BY T0.DocDate DESC
Cuál es la condición que no te está resperando? la del LIKE o la del NOT LIKE?
Tienes razón, creo que hay que cambiar el planteamiento, intenta modificando la última condición por la siguiente:
AND T0.DocEntry NOT IN (SELECT DISTINCT DocEntry FROM RDR1 WHERE ItemCode LIKE 'A03%')
Me parece que hacía falta invertir el IN por un NOT IN, y el último NOT LIKE por LIKE, porque de la forma anterior, aunque el documento tuviera el código en alguna de las líneas comoquiera lo tomaba en cuenta, y por eso no te filtraba todos los registros como tú lo necesitabas.
Espero que te sirva. Un saludo desde Monterrey (tierra de la carne asada )