Criterio Case para Sumatoria de Diferentes Variables - SQL Server

Necesito crear una columna 'Resultado' con un criterio: 'Cumple' 'No Cumple' en base a la sumatoria de variables contenidas en 'Facturado' que cumplan con la condición 'Solicitado'.

En la imagen, la sumatoria de 'Facturado' cumple con lo 'Solicitado' para cada Código (Código 49528 se solicitó 10000) pero tienen fechas distintas de facturación, sin embargo, 'Cumplen' el criterio 'Solicitado. (Código 49528 Solicitado 10000 Facturado 10000)

Por favor si alguien sabe como generar instrucción en SQL para este problema sería de gran ayuda.

Muchas gracias.

3 Respuestas

Respuesta
1
SELECT Codigo, Solicitado, Facturado, [Fecha Factura], CASE WHEN Solicitado <=
(SELECT SUM(Facturado)
FROM tabla t2
WHERE t1.Codigo = t2.Codigo) THEN 'Cumple' ELSE 'No cumple' END AS Resultado
FROM tabla AS t1
Respuesta
1

En SQLServer los puedes hacer con esta Vista:

SELECT Codigo, Solicitado, Facturado, [Fecha Factura], CASE WHEN Solicitado =
(SELECT SUM(Facturado)
FROM dbo. TJoseRomero2 B
WHERE A.Codigo = B.Codigo) THEN 'Cumple' ELSE 'No cumple' END AS Resultado
FROM dbo. TJoseRomero2 AS A

donde solo debes cambiar el nombre de la tabla (TJoseRomero2) por el nombre de la tuya.

Antes de todo, muchas gracias por responder. Tengo problemas para adaptar el código que me enviaste. Las instrucción que cree es una tabla temporal.

Esta es la equivalencia para la instrucción que me enviaste:

A.ItemCode(codigo), B.[Q Oferta](solicitado), A.[Cantidad Facturado](facturado), A.[Fecha Facturación](Fecha Facturación), Criterio Q(Resultado)

Acá viene mi problema, la tabla temporal la tengo relacionada a dos tablas (#) y no se como adaptar la instrucción que me enviaste, me podrías ayudar por favor?

Este es el From de la tabla temporal:

FROM #FACTURACION A
LEFT JOIN #OFERTA B ON (A.[Oferta de Venta]=B.[Oferta de Venta] AND A.ItemCode=B.[Codigo] AND A.[N° OP]=[OP])

La verdad, no acabo de entender del todo tu mensaje, pero te doy dos opciones, a ver si "suena la flauta" y es lo que quieres:

1º/ En la SQL que te propuse, sustituye (además de los nombres de los campos por los que tu tengas) los dbo. TJoseRomero2 por el from de tu tabla temporal. Además, cambia los A y B de mi propuesta por otras letras, por ejemplo X e Y

2º/ Crea una vista con tu tabla temporal, guárdala con el nombre que quieras (por ejemplo VJoseRomero2) y luego haz una SQL como la que te propongo pero en vez de hacer referencia a la tabla en los FROM, haces referencia a la vista.

La verdad es que no logro identificar (y resolver) los pasos para la instrucción. Esta es la query

(más completa, pero resumida), coloqué la tabla temporal que me sugeriste, #CRITERIO, en la query pero no logro resolverlo. Por favor perdona el exceso de confianza, pero es posible que le des un vistazo?

Vaya por delante que mis conocimientos de SQLServer son bastante básicos, y probablemente sepas tú más que yo sobre su manejo, pero, por intentar ayudarte, prueba así:

SELECT A.ItemCode, B.Codigo, B.[Q Oferta],A.[Cantidad Facturado],A.[Fecha Facturacion],
CASE WHEN B.[Q Oferta]=(SELECT SUM([Cantidad Facturado])
FROM #FACTURACION F
WHERE A.ItemCode = F.ItemCode)
THEN 'Cumple' ELSE 'No cumple' END AS [Criterio Q]
INTO #CRITERIO
FROM #FACTURACION A LEFT JOIN #OFERTA B ON a.ItemCode=B.Codigo

Y para la otra SQL, lo harías siguiendo el mismo esquema

Respuesta
1

Quiero dejar claro que no tengo ni idea de SQLServer, y mucho menos de Excel (me parece verlo en la imagen). Pero como las consultas en Access están hechas en SQL tal vez te dé una idea. Si tengo la tabla Otra

En que puedes ver que hay un código que no lo cumple y construyo la consulta a la que le añado un campo A(que podría no mostrarse)

El campo Resultado puedo ponerlo como

De forma que cuando la abro

Pero me remito a lo dicho en el primer párrafo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas