Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-11-2015
Malixnox Malixnox is offline
Miembro
NULL
 
Registrado: nov 2015
Posts: 15
Poder: 0
Malixnox Va por buen camino
Ayuda (Por favor) con un Grid View C# y SQL

Muy Buenas a las almas que se compadezcan de mi, a los que no pues solo buenas.

Tengo el siguiente problema, tengo varios en realidad pero el principal es el siguiente:

Soy actualmente pasante en una empresa, la empresa me ha estado poniendo a hacer cosas y yo las he hecho pero la última que me pidieron mis conocimientos noobs se quedaron cortos, voy a explicar primero qué debo hacer.

El programa es una aplicación web que muestra el consumo de químicos mensual por una planta en específico (Molinos), mostrando el código del químico es decir una tabla como:

Código de químicos|Enero|Febrero|Marzo|Abril|Mayo|Junio|etc...|Total_Anual
Código 1 | 413 | 34344 | num | num | num | sum de num
Código 2 ...

Así sucesivamente, la base de datos es de la siguiente manera:

Código de químico: TPROD.
Fechas: yyyyMMdd - Año, med y día, es decir para el primero de enero del 2015 sería 20150101
TWRKC: Código de molinos.
Cantidades: T1, T2, T3 (Se dividen por turnos) o sea el total es SUM(T1+T2+T3)
TTYPE: El tipo de producto, para diferenciar, I es para Insumos y R para producción.

Las cantidades se sacan con la siguiente fórmula:

WHERE TTYPE = I SUM(T1+T2+T3)/(WHERE = 'R' (SUM(T1+T2+T3))/1000), mi consulta en la BD es exactamente esta:

Código SQL [-]
SELECT        TPROD, 
SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '01%' AND TTYPE = 'I' AND TPROD LIKE 'Q%' THEN (T1 + T2 + T3) * - 1 ELSE 0 END)/SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '01%' AND TTYPE = 'R' THEN ((T1 + T2 + T3)/1000) ELSE 1 END) AS Enero, 
SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '02%' AND TTYPE = 'I' AND TPROD LIKE 'Q%' THEN (T1 + T2 + T3) * - 1 ELSE 0 END)/SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '02%' AND TTYPE = 'R' THEN ((T1 + T2 + T3)/1000) ELSE 1 END) AS Febrero, 
SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '03%' AND TTYPE = 'I' AND TPROD LIKE 'Q%' THEN (T1 + T2 + T3) * - 1 ELSE 0 END)/SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '03%' AND TTYPE = 'R' THEN ((T1 + T2 + T3)/1000) ELSE 1 END) AS Marzo, 
SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '04%' AND TTYPE = 'I' AND TPROD LIKE 'Q%' THEN (T1 + T2 + T3) * - 1 ELSE 0 END)/SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '04%' AND TTYPE = 'R' THEN ((T1 + T2 + T3)/1000) ELSE 1 END) AS Abril, 
SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '05%' AND TTYPE = 'I' AND TPROD LIKE 'Q%' THEN (T1 + T2 + T3) * - 1 ELSE 0 END)/SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '05%' AND TTYPE = 'R' THEN ((T1 + T2 + T3)/1000) ELSE 1 END) AS Mayo,
SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '06%' AND TTYPE = 'I' AND TPROD LIKE 'Q%' THEN (T1 + T2 + T3) * - 1 ELSE 0 END)/SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '06%' AND TTYPE = 'R' THEN ((T1 + T2 + T3)/1000) ELSE 1 END) AS Junio, 
SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '07%' AND TTYPE = 'I' AND TPROD LIKE 'Q%' THEN (T1 + T2 + T3) * - 1 ELSE 0 END)/SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '07%' AND TTYPE = 'R' THEN ((T1 + T2 + T3)/1000) ELSE 1 END) AS Julio, 
SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '08%' AND TTYPE = 'I' AND TPROD LIKE 'Q%' THEN (T1 + T2 + T3) * - 1 ELSE 0 END)/SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '08%' AND TTYPE = 'R' THEN ((T1 + T2 + T3)/1000) ELSE 1 END) AS Agosto, 
SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '09%' AND TTYPE = 'I' AND TPROD LIKE 'Q%' THEN (T1 + T2 + T3) * - 1 ELSE 0 END)/SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '09%' AND TTYPE = 'R' THEN ((T1 + T2 + T3)/1000) ELSE 1 END) AS Septiembre,
SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '10%' AND TTYPE = 'I' AND TPROD LIKE 'Q%' THEN (T1 + T2 + T3) * - 1 ELSE 0 END)/SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '10%' AND TTYPE = 'R' THEN ((T1 + T2 + T3)/1000) ELSE 1 END) AS Octubre,
SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '11%' AND TTYPE = 'I' AND TPROD LIKE 'Q%' THEN (T1 + T2 + T3) * - 1 ELSE 0 END)/SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '11%' AND TTYPE = 'R' THEN ((T1 + T2 + T3)/1000) ELSE 1 END) AS Noviembre,
SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '12%' AND TTYPE = 'I' AND TPROD LIKE 'Q%' THEN (T1 + T2 + T3) * - 1 ELSE 0 END)/SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '12%' AND TTYPE = 'R' THEN ((T1 + T2 + T3)/1000) ELSE 1 END) AS Diciembre,
SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '%' AND TTYPE = 'I' AND TPROD LIKE 'Q%' THEN (T1 + T2 + T3) * - 1 ELSE 0 END)/SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '%' AND TTYPE = 'R' THEN ((T1 + T2 + T3)/1000) ELSE 1 END) AS Total_Anual
FROM            BPCS_TRANS_ITH_2
WHERE        (TTDTE LIKE '%' + @TTDTE + '%') AND (THWRKC LIKE '431105')
GROUP BY TPROD
ORDER BY TPROD

Pero tengo me trae los siguientes problemas:

Me muestra todos los TPROD y solo quiero que me muestre los TPROD que comiencen por Q, se me ocurre hacerlo con un if pero no manejo Gridview por eso pido ayuda, las cantidades resultantes no me están cuadrando pero necesito una revisión para ver si es verdad que no me dan bien.

Ah, ¿Por qué no hice una tabla toda genial con una cantidad exagerada de labels que es mas trabajosa pero me gusta mas?, porque me obligaron ya que los químicos podrían aumentar es decir puede que el año que viene agreguen unos 6 químicos mas, tendría que hacerlo a mano y tienen que avisarme ellos, mi jefe me dijo que lo quería auto generado (El no programa, solo me dijo que fuese auto generado), por consiguiente terminé usando un Gridview, que no los sé usar así que he usado mis pocos conocimientos de SQL, para ver si lo hacía desde el ayudante, ya me rendí, pues el ayudante no ayuda, solo me comprueba las consultas, haha.

Ah, si, en el trabajo tengo Internet censurado por ello no ando viendo vídeos en YouTube "GridViews for dummies", de hecho este foro no está censurado by el Barracuda filter ese que tenemos acá, por eso ando posteando acá, sino es revisar desde el cel si respondieron y copiar el código a mano (Ya lo he hecho antes cuando me quedo trancado, es un proceso lento pero bueh) ah y tampoco tengo acceso a los puertos USB, están bloqueados... Estoy programando en una granja haha, o con las manos atadas mas bien, sin Internet ni USB, wao... Ya 2 meses acá, me acostumbré.

Pero llevo como 2 semanas trancado y ya de verdad necesito ayuda y por eso posteo, si alguien se apiada de mi alma, estoy solo en un cuarto, nadie para ayudarme, sin Internet ni USB, no me dejen morir, haha, realmente lo que pido es que si alguien me puede hacer ese mismo código pero en la parte de código C# del Gridview porque yo personalmente no tengo idea de como hacerlo, el código está vacio y todo es hecho desde el ayudante, lo único que tiene el Gridview es:

<SelectParameters>
<asp:ControlParameter ControlID="label0" Name="TTDTE" PropertyName="Text"
DefaultValue="2015" />
</SelectParameters>

Que es un mugre label que agarra el año actual y ya.

#HALPH

Gracias por su atención así no puedan ayudarme, al menos me leyeron llorando (No literalmente claro) por acá.
Responder Con Cita
  #2  
Antiguo 01-12-2015
Malixnox Malixnox is offline
Miembro
NULL
 
Registrado: nov 2015
Posts: 15
Poder: 0
Malixnox Va por buen camino
Ayuda con una consulta (Por favor) ~

Publiqué un tema antes pero me doy cuenta que era pedir mucho, era pasar a código algo, esta vez voy con el mismo problema pero necesto es ayuda con la consulta porque ya llevo mucho tiempo perdido en esto, copy pasteo esto:

"Soy actualmente pasante en una empresa, la empresa me ha estado poniendo a hacer cosas y yo las he hecho pero la última que me pidieron mis conocimientos noobs se quedaron cortos, voy a explicar primero qué debo hacer.

El programa es una aplicación web que muestra el consumo de químicos mensual por una planta en específico (Molinos), mostrando el código del químico es decir una tabla como:

Código de químicos|Enero|Febrero|Marzo|Abril|Mayo|Junio|etc...|Total_Anual
Código 1 | 413 | 34344 | num | num | num | sum de num
Código 2 ...

Así sucesivamente, la base de datos es de la siguiente manera:

Código de químico: TPROD.
Fechas: yyyyMMdd - Año, med y día, es decir para el primero de enero del 2015 sería 20150101
TWRKC: Código de molinos.
Cantidades: T1, T2, T3 (Se dividen por turnos) o sea el total es SUM(T1+T2+T3)
TTYPE: El tipo de producto, para diferenciar, I es para Insumos y R para producción.

Las cantidades se sacan con la siguiente fórmula:"

WHERE TTYPE = AND WHERE TPROD LIKE 'Q%' SUM(T1+T2+T3)/(WHERE = 'R' (SUM(T1+T2+T3))/1000), mi consulta en la BD es exactamente esta:

Este es mi código hasta ahora.

Código SQL [-]
SELECT        TPROD, 
SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '01%' AND TTYPE = 'I' AND TPROD LIKE 'Q%' THEN (T1 + T2 + T3) * - 1 ELSE 0 END)/SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '01%' AND TTYPE = 'R' THEN (T1 + T2 + T3) ELSE 1 END) AS Enero, 
SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '02%' AND TTYPE = 'I' AND TPROD LIKE 'Q%' THEN (T1 + T2 + T3) * - 1 ELSE 0 END)/SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '02%' AND TTYPE = 'R' THEN (T1 + T2 + T3) ELSE 1 END) AS Febrero, 
SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '03%' AND TTYPE = 'I' AND TPROD LIKE 'Q%' THEN (T1 + T2 + T3) * - 1 ELSE 0 END)/SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '03%' AND TTYPE = 'R' THEN (T1 + T2 + T3) ELSE 1 END) AS Marzo, 
SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '04%' AND TTYPE = 'I' AND TPROD LIKE 'Q%' THEN (T1 + T2 + T3) * - 1 ELSE 0 END)/SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '04%' AND TTYPE = 'R' THEN (T1 + T2 + T3) ELSE 1 END) AS Abril, 
SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '05%' AND TTYPE = 'I' AND TPROD LIKE 'Q%' THEN (T1 + T2 + T3) * - 1 ELSE 0 END)/SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '05%' AND TTYPE = 'R' THEN (T1 + T2 + T3) ELSE 1 END) AS Mayo,
SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '06%' AND TTYPE = 'I' AND TPROD LIKE 'Q%' THEN (T1 + T2 + T3) * - 1 ELSE 0 END)/SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '06%' AND TTYPE = 'R' THEN (T1 + T2 + T3) ELSE 1 END) AS Junio, 
SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '07%' AND TTYPE = 'I' AND TPROD LIKE 'Q%' THEN (T1 + T2 + T3) * - 1 ELSE 0 END)/SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '07%' AND TTYPE = 'R' THEN (T1 + T2 + T3) ELSE 1 END) AS Julio, 
SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '08%' AND TTYPE = 'I' AND TPROD LIKE 'Q%' THEN (T1 + T2 + T3) * - 1 ELSE 0 END)/SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '08%' AND TTYPE = 'R' THEN (T1 + T2 + T3) ELSE 1 END) AS Agosto, 
SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '09%' AND TTYPE = 'I' AND TPROD LIKE 'Q%' THEN (T1 + T2 + T3) * - 1 ELSE 0 END)/SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '09%' AND TTYPE = 'R' THEN (T1 + T2 + T3) ELSE 1 END) AS Septiembre,
SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '10%' AND TTYPE = 'I' AND TPROD LIKE 'Q%' THEN (T1 + T2 + T3) * - 1 ELSE 0 END)/SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '10%' AND TTYPE = 'R' THEN (T1 + T2 + T3) ELSE 1 END) AS Octubre,
SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '11%' AND TTYPE = 'I' AND TPROD LIKE 'Q%' THEN (T1 + T2 + T3) * - 1 ELSE 0 END)/SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '11%' AND TTYPE = 'R' THEN (T1 + T2 + T3) ELSE 1 END) AS Noviembre,
SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '12%' AND TTYPE = 'I' AND TPROD LIKE 'Q%' THEN (T1 + T2 + T3) * - 1 ELSE 0 END)/SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '12%' AND TTYPE = 'R' THEN (T1 + T2 + T3) ELSE 1 END) AS Diciembre,
SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '%' AND TTYPE = 'I' AND TPROD LIKE 'Q%' THEN (T1 + T2 + T3) * - 1 ELSE 0 END)/SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '%' AND TTYPE = 'R' THEN (T1 + T2 + T3) ELSE 1 END) AS Total_Anual
FROM            BPCS_TRANS_ITH_2
WHERE        (TTDTE LIKE '%' + @TTDTE + '%') AND (THWRKC LIKE '431101') AND TPROD LIKE 'Q%'
GROUP BY TPROD
ORDER BY TPROD

El problema que me queda es que divide mal, divide entre los TPROD que se consigue y yo quiero es qeu divida únicamente por el TPROD final de cada mes o sea SUM(T1+T2+T3)/1000 del total del mes que serían los (TTDTE LIKE '%' + @TTDTE + '%') para las fechas, realmente no sé cómo hacerla y si entiendo por qué me da mal, porque no sé, necesito un SUM del SUM que no logro hacer, o sea necesito un SUM del SUM de las R, si alguien sabe cómo pues gracias, sino bueno solo dejé otro tema mientras invento un UNNION INNER JOIN DISTINCT = Lo que quiero (Ojalá fuese tan fácil).
Responder Con Cita
  #3  
Antiguo 01-12-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Bienvenido al foro, recuerda leer la guía de estilo

PD: Don't repeat yourself
Responder Con Cita
  #4  
Antiguo 01-12-2015
Malixnox Malixnox is offline
Miembro
NULL
 
Registrado: nov 2015
Posts: 15
Poder: 0
Malixnox Va por buen camino
Disculpa, la estoy leyendo en este momento ya que no puedo seguir trabajando si no resuelvo esto, pero ¿Cómo edito el nombre de un tema?, no me sale la opción, ya vi en las primeras líneas que "ayuda" no va en la guía de estilo que me presentas y seguro iré viendo mas detalles y por lo mismo no eliminé el tema anterior, no consigo la opción a la vista, disculpe las molestias causadas.
Responder Con Cita
  #5  
Antiguo 01-12-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
No te preocupes, eres novato aquí, tan solo tenlo en cuenta para los siguientes mensajes

En cuanto a tu pregunta, no queda muy clara.
Responder Con Cita
  #6  
Antiguo 01-12-2015
Malixnox Malixnox is offline
Miembro
NULL
 
Registrado: nov 2015
Posts: 15
Poder: 0
Malixnox Va por buen camino
Trataré de explicarme mejor.

El programa debe mostrar insumos de químicos real por mes, es decir lista de todos los químicos y cuánto se usaron por mes.

Para ello hay condiciones que son los WHERE y los WHEN en el CASE, los químicos son catalogados como Insumos y todos los insumos son TTYPE = 'I', para diferenciar químicos de los demás insumos usados en el mes se usa el identificador TPROD que podría decirse que es el Id, los TPROD que comiencen por Q son los químicos, es decir así se diferencian.

La producción Real es la suma de todas las R independientemente del código, pero igual todas comienzan por S en TPROD, si es que esa información es útil.

Las cantidades de cualquier isumo, producción, rechazo, desperdicio, etc se cargan en T1, T2 y T3 que sería lo que consumió y produjo cada turno, es decir para sacar cuanto se consumió y produjo en un día se suman los 3 turnos.

Consumo de insumos real es la división entre el químico específicos y la producción real del mes es decir:

SUM de Q1(La suma de T1+T2+T3 con el mismo código)/(Producción real del mes (T1+T2+T3 siempre que sea R y el mes sea el mismo))/1000 El dividir entre 1000 es para pasar la unidad de Kilogramos a Toneladas.

Mi lógica en un principio fue el código expuesto arriba, pero la división tiene como problema que divide el TPROD mas cercano o el que se va encontrando o ni remota idea de qué divide porque el SUM de todas las R del mes no es porque los comprobé en consultas separadas cuanto deberían dar.

Mi problema es ese, que la división no me está dando como debería y mi solución (Mental) es hacerle un SUM al SUM de R porque anda sumando cada TPROD con R y dividen entre sí y un desastre de división, quiero es sumar todas y cada una de las R para dar un valor único que se repetirá en ese mes nada mas y para el siguiente lo mismo pero del mes siguiente y así sucesivamente.

No sé si me termino de explicar.

La tabla debería mostrar algo como esto:

Código:
TPROD|Enero                                                                           |Febrero
Q1   |SUM(T1+T2+T3 del Q1 de 201501%)/(SUM(T1+T2+T3 de las R totales de 201501%)/1000)|SUM(T1+T2+T3 del Q1 de 201502%)/(SUM(T1+T2+T3 de las R totales de 201502%)/1000)
Q2   |SUM(T1+T2+T3 del Q2 de 201501%)/(SUM(T1+T2+T3 de las R totales de 201501%)/1000)|SUM(T1+T2+T3 del Q2 de 201502%)/(SUM(T1+T2+T3 de las R totales de 201502%)/1000)
Q3   |SUM(T1+T2+T3 del Q3 de 201501%)/(SUM(T1+T2+T3 de las R totales de 201501%)/1000)|SUM(T1+T2+T3 del Q3 de 201502%)/(SUM(T1+T2+T3 de las R totales de 201502%)/1000)
Es decir mi consulta de las I de código Q% es específica y la de las R es solo una sumatoria que no importa el código solo que sea R, de la misma planta y del mismo mes, pero sin separarse por código, un total de R.

Gracias por leer.
Responder Con Cita
  #7  
Antiguo 01-12-2015
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Hola,
divide y vencerás. Yo te propongo que hagas varias cosas.

1.- Explica mejor tu problema. Es un poco liosa la explicación que das.
2.- Intenta sacar en una fila por cada producto y mes el total. O sea, mes, producto, T1+T2+T3, Total de T1+T2+T3 de las Rs.
3.- Una vez que tengas hecho eso, utiliza el arte de las subconsultas. Es otro mundo. Es decir, el resultado de una consulta lo utilizas d entrada en otra.

ejemplo, saco las cantidades de los productos
Código SQL [-]
select Anio_Mes, producto, sum(T1+t2+t3) as TOTAL
from tabla
where codigo like 'Q%'
and fecha entre los meses que quieras mirar
group by Anio_Mes, Producto

Ahora saco los totales para dividir

Código SQL [-]
select Anio_Mes, producto, sum(T1+t2+t3) as TOTAL_R
from tabla
where codigo like 'Q%' y la 'R'
and fecha entre los meses que quieras mirar
group by Anio_Mes, Producto

Cualquiera de las cantidades la multiplicas por 0,00001 y la división te dará en Toneladas

Cuando consigas estos datos de cada producto, avisamos, y veremos cómo los juntamos. Hay varias soluciones, veremos cuantos datos manejas y qué rendimiento nos dan tus consultas. Dependiendo de los tiempos de respuesta, tomaremos una decisión.

Un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -

Última edición por Casimiro Notevi fecha: 02-12-2015 a las 02:06:57.
Responder Con Cita
  #8  
Antiguo 02-12-2015
Malixnox Malixnox is offline
Miembro
NULL
 
Registrado: nov 2015
Posts: 15
Poder: 0
Malixnox Va por buen camino
Buenas, disculpen que tardase varias horas en responder, ya no estoy en el trabajo y como dije no tengo puerto USB y no sé cómo pero esta página me abre allí, puedo abrir algunas páginas pero por caché, equis, lo que digo es que no puedo traerme unas base de datos clon o la misma por eso, para probar aquí en mi casa, les iría respondiendo bien es mañana en el trabajo, igual muchas gracias por leer.

Probaré qué me arroja esa consulta fjcg02 y postearé aquí, no soy muy bueno manejando SQL, siendo sincero, por eso uso cantidades absurdas de labels pero programo mis consultas una por una como quiero y meto todo en variables, las prostituyo si quiero y me dan mis valores, los otros programas hechos para la empresa están así, buscando por google viendo chachés y tal vi disque UNION ALL pero no encontré manera que me funcionase, les respondo con resultados mañana, si dejan mas soluciones las probaré todas hasta que me funcione, de nuevo gracias a todos ~

Disculpen las molestias causadas y los errores de estilo.
Responder Con Cita
  #9  
Antiguo 02-12-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¡Ufff!... creo que lo primero que tienes que hacer es exigir las herramientas necesarias para realizar tu trabajo. Internet, por supuesto, es lo primero.
Parece que estás en Guantánamo
Responder Con Cita
  #10  
Antiguo 02-12-2015
Malixnox Malixnox is offline
Miembro
NULL
 
Registrado: nov 2015
Posts: 15
Poder: 0
Malixnox Va por buen camino
Si se pudiese lo hubiese hecho, pero hasta mi jefe tiene el Internet censurado, no es cuestión contra mi que soy pasante, mis compañeros de trabajo están igual, mejor cargo lo tienes menos censurado pero me parece super ridículo que a los programadores nos tengan así y sin puerto usb.

Nada se puede hacer, si mi jefe que es lógicamente alguien de buen cargo, tampoco que bruto que el super cargo, no puede yo que no gozo de los mismos beneficios que los trabajadores normales menos puedo.

Y si un amigo le comenté eso que ando programando sin Internet ni puerto usb y dijo que ando programando una granja haha.
Responder Con Cita
  #11  
Antiguo 02-12-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Ya, pues eso, por eso digo que debes exigir acceso a internet.
Responder Con Cita
  #12  
Antiguo 02-12-2015
Malixnox Malixnox is offline
Miembro
NULL
 
Registrado: nov 2015
Posts: 15
Poder: 0
Malixnox Va por buen camino
Bueno, probando lo que dijo fjcg02, gracias por comentar, pues no agrupa por fecha, puse GROUP BY TTDTE solo para ver, porque GROUP BY TPROD, TTDTE (O sea producto y fecha) y hacía lo mismo de siempre y agrupaba por código nada mas, la verdad es que también quedé confundido en como declarar "and fecha entre los meses que quieras mirar", o sea ¿Coloco 12 OR y tal?, pero lo hice cambiando el código que ya tenía, pero solo pidiendo R, me limité a que me diesen las R mensuales luego ver como las pego a las I pero no agrupa por fecha/TTDTE.

Me salió específicamente esto: "Is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause."

El código que usé fue:

Código SQL [-]
SELECT        TPROD, TTDTE, 
SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '01%' THEN (T1 + T2 + T3) ELSE 0 END) AS EneroR, 
SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '02%' THEN (T1 + T2 + T3) ELSE 0 END) AS FebreroR, 
SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '03%' THEN (T1 + T2 + T3) ELSE 0 END) AS MarzoR, 
SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '04%' THEN (T1 + T2 + T3) ELSE 0 END) AS AbrilR, 
SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '05%' THEN (T1 + T2 + T3) ELSE 0 END) AS MayoR,
SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '06%' THEN (T1 + T2 + T3) ELSE 0 END) AS JunioR, 
SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '07%' THEN (T1 + T2 + T3) ELSE 0 END) AS JulioR, 
SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '08%' THEN (T1 + T2 + T3) ELSE 0 END) AS AgostoR, 
SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '09%' THEN (T1 + T2 + T3) ELSE 0 END) AS SeptiembreR,
SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '10%' THEN (T1 + T2 + T3) ELSE 0 END) AS OctubreR,
SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '11%' THEN (T1 + T2 + T3) ELSE 0 END) AS NoviembreR,
SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '12%' THEN (T1 + T2 + T3) ELSE 0 END) AS DiciembreR,
SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '%' THEN (T1 + T2 + T3) ELSE 0 END) AS Total_AnualR
FROM            BPCS_TRANS_ITH_2
WHERE         (THWRKC = '431101') AND TTYPE = 'R' 
GROUP BY TPROD, TTDTE, TTYPE
ORDER BY TPROD

PD: Las R no comienzan por Q, si quieres diferenciarlas en código comienzan por S, pero realmente no necesito sus código sino sus propios totales.

PD2: Disculpen mi falta de habilidad y las molestias.
Responder Con Cita
  #13  
Antiguo 02-12-2015
Malixnox Malixnox is offline
Miembro
NULL
 
Registrado: nov 2015
Posts: 15
Poder: 0
Malixnox Va por buen camino
Para ver si se entiende mas, este código da este resultado, este es uno de los primeros códigos que me dieron, que este lo uso pero para sacar uso de químicos total, tengo aún problemas con los decimales y convertirlo en money no me ayuda, pero indiferentemente este código da los químicos o sea las I totales por código de químicos:

Código SQL [-]
SELECT        TPROD, 
SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '01%' THEN (T1 + T2 + T3) * - 1 ELSE 0 END) AS Enero, 
SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '02%' THEN (T1 + T2 + T3) * - 1 ELSE 0 END) AS Febrero, 
SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '03%' THEN (T1 + T2 + T3) * - 1 ELSE 0 END) AS Marzo, 
SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '04%' THEN (T1 + T2 + T3) * - 1 ELSE 0 END) AS Abril, 
SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '05%' THEN (T1 + T2 + T3) * - 1 ELSE 0 END) AS Mayo,
SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '06%' THEN (T1 + T2 + T3) * - 1 ELSE 0 END) AS Junio, 
SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '07%' THEN (T1 + T2 + T3) * - 1 ELSE 0 END) AS Julio, 
SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '08%' THEN (T1 + T2 + T3) * - 1 ELSE 0 END) AS Agosto, 
SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '09%' THEN (T1 + T2 + T3) * - 1 ELSE 0 END) AS Septiembre, 
SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '10%' THEN (T1 + T2 + T3) * - 1 ELSE 0 END) AS Octubre, 
SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '11%' THEN (T1 + T2 + T3) * - 1 ELSE 0 END) AS Noviembre, 
SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '12%' THEN (T1 + T2 + T3) * - 1 ELSE 0 END) AS Diciembre, 
SUM(CASE WHEN TTDTE LIKE '%' + @TTDTE + '%' THEN (T1 + T2 + T3) * - 1 ELSE 0 END) AS Total_Anual
FROM            BPCS_TRANS_ITH_2
WHERE        (TTYPE = 'I') AND (TTDTE LIKE '%' + @TTDTE + '%') AND (THWRKC LIKE '43110%') AND (TPROD LIKE 'Q%')
GROUP BY TPROD
ORDER BY TPROD

Eso da de resultado la imagen que de subí, no sé si ayude en algo la imagen pero a lo mejor los guía a entender.

La imagen que ven, cada resultado, o sea que si el 125 y el 856 deben ser divididos por el total de R en el mes de Enero y lo de dividirlo entre 1000 o multiplicarlo por el número que dijeron por allí para ponerlo en toneladas pero necesito es total de R para dividir por cada resultado de la consulta.
Imágenes Adjuntas
Tipo de Archivo: png 2adsf.png (11,2 KB, 10 visitas)
Responder Con Cita
  #14  
Antiguo 02-12-2015
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
A ver doctor, vamos por partes.

Te recomiendo un manual de SQL más que rápido.

Cuando agrupas, los campos que van en el group by van tal cual en la select, el resto tiene que ir en una función de agregado ( sum, max, min, avg, ...)

Cuando te puse Anio_Mes, me refería a que tienes que ponerlo para luego poder agruparlo.
Del campo en el que tienes la fecha, tendrás que sacar el año y el mes. Si filtras por año, sólamente necesitarás el mes, pero no sé qué formato tiene el campo (date, string, ...). Si tu campo de fecha es el TTDTE, deduzco ( ya que no has puesto el tipo de campo que es ) que es un string/char/varchar.

Entonces, para saber el año y el mes, te quedas con los primeros 6 caracteres del campo TTDTE. O si filtras por el año, te puedes quedar con los caracteres 5 y 6 que identifican el año. Si no filtras, se mezclarían los datos del mes de Enero de diferentes años.

Resumiendo, y asumiendo que el campo TTDTE es de tipo CHAR o VARCHAR y que contiene la fecha en formato YYYYMMDD
Código SQL [-]
Si no filtras por año
select substring(TTDTE,1,6) as Mes, TPROD, 
sum(T1+t2+t3) as TOTAL
from tabla
where TPROD like 'Q%'
group by substring(
TTDTE,1,6), TPROD

Código SQL [-]
Si filtras por año
select substring(TTDTE,5,2) as Mes, TPROD, 
sum(T1+t2+t3) as TOTAL
from tabla
where TPROD like 'Q%'
and substring(TTDTE,1,4) = '2015'
group by substring(TTDTE,5,2), TPROD

Prueba y nos dices.

Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -

Última edición por Casimiro Notevi fecha: 02-12-2015 a las 16:34:01.
Responder Con Cita
  #15  
Antiguo 02-12-2015
Malixnox Malixnox is offline
Miembro
NULL
 
Registrado: nov 2015
Posts: 15
Poder: 0
Malixnox Va por buen camino
Gracias por seguir por aquí y no compila o agarra la consulta como prefieras llamarlo porque el campo TTDTE es Numeric (Ni yo mismo lo sabía, tuve que ir a la computadora de un colega que no vino para confirmar, yo no tengo permisos para ver definiciones de tablas).

Y la verdad resumiendo la tristeza es que el resultado de lo que quiero sería para mi hacer consultas por detrás las veces necesarias pero con consultas como esta para cada mes en el caso de las R.

Código SQL [-]
SELECT SUM(T1+T2+T3) 
FROM            BPCS_TRANS_ITH_2
WHERE (TTDTE LIKE '%' + @TTDTE + '01%') AND (THWRKC LIKE '431101') AND TTYPE = 'R'

Esto lo divido entre consultas iguales pero de I o la del CASE que tengo y walah ~

Pero como debe ser auto generado porque bueh, así lo quieren no puedo matarme a labels.

Pero si, confirmé y es TTDTE es Numeric y no reconoce eso de substring (sorry la ignorancia pero no sé para qué sirve, debes ser un pro en sql, yo me siento realizado nomás entendiendo un poco los CASE, haha).

Gracias igualmente, si tienes otra posible solución la pruebo a penas la lea ~

PD: #Halph
Responder Con Cita
  #16  
Antiguo 02-12-2015
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Hola de nuevo,
veo que en tu consulta pones @TTDTE.

Si utilizas esto en lugar de TTDTE en la función substring seguramente te funcione.

NOTA: no sé que motor de bbdd usas. Dependiendo de cual sea puede variar la función SUBSTRING, SUBSTR, ....

Insisto. Busca información de SQL, que hay mucha y buena, y te vendrá de perlas para el desempeño de tus funciones. Esto y exigir que te pongan internet como dice Casimiro, te puede dar mucha luz.

Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #17  
Antiguo 02-12-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
No entiendo, un compañero puede ver definiciones de tablas, tú no puedes, no tenéis internet... por cierto, ¿cómo accedes a estos foros?
En fin, no sé, es como si a un carpintero no le dan sierras, martillos, clavos, etc.
Responder Con Cita
  #18  
Antiguo 02-12-2015
Malixnox Malixnox is offline
Miembro
NULL
 
Registrado: nov 2015
Posts: 15
Poder: 0
Malixnox Va por buen camino
Dije al principio es que tengo el Internet censurado, no que no tenía, puedo ver algunas páginas por caché y ésta por alguna razón me abrió normal, me ha pasado como en no sé 4 páginas aleatorias, pues menos mal justo era una de un foro de programadores y pues por eso publico mi duda aquí, si, como pasante mi nivel de privilegios es menor por cuestiones de confidencialidad de la empresa que esto y lo otro... Puedo acceder a todos y cada uno de los datos pero no a sus definiciones, Fuck Logic.

No me sirvió la consulta porque suma T1+T2+T3 de los TPROD Q de todo el año, bueno veré que guías por caché me abren de SQL a ver si entiendo los substring esos y me las arreglo, si alguien tiene solución igualmente la probaré.

Gracias a todos.
Responder Con Cita
  #19  
Antiguo 02-12-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Malixnox Ver Mensaje
si alguien tiene solución igualmente la probaré.
El problema no es si alguien tiene la solución, el problema es que no nos has dado información EXACTA de qué base de datos usas, qué estructura tiene las tablas, de qué tipo son los campos, qué quieres conseguir EXACTAMENTE, etc.
Ese es el problema, que estamos intentando adivinar, dando palos de ciego, porque no das información.
Responder Con Cita
  #20  
Antiguo 02-12-2015
Malixnox Malixnox is offline
Miembro
NULL
 
Registrado: nov 2015
Posts: 15
Poder: 0
Malixnox Va por buen camino
Ya, en un rato vuelvo a la PC del compañero de trabajo, llegó hace poco, anoto la definición de la tabla a ver, la versión de SQL no sabría decirte porque las Bases de datos no las tengo aquí, todas están montadas en el servidor, en mi primer programa aquí perdí mas de una semana tirando código para darme cuenta del horror, explico primero.

Ellos tienen un sistema de consultas llamado BPCS que muestra unas tablas maestras que se usan en las empresas hermanas y en ésta propiamente, está en algo así como la nube o simplemente un servidor (Ni idea) y nada, me pidieron unas consultas de allí para algunas operaciones del primer programa, tiré y tiré códigos sql muchísimo tiempo y averigüé luego de mas de una semana de que nada me sirviese que el programa ente divino, deidad omnisciente estaba en Access, solo puse OlDB y todo compiló... Tristemente no les doy toda la información no por gusto, no la tengo o no he averiguado la manera de obtenerla aún, yo manejo SQL solo por el manejador que tiene pegado el Visual Studios que estoy usando y ya.

En un rato cuando él se desocupe, para no interrumpirlo programando saco la definición de la tabla.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ayuda por favor para armar consulta en firebird Velia Firebird e Interbase 4 21-08-2007 17:37:47
Ayuda por favor lazarous PHP 2 18-07-2005 19:06:58
Por Favor verifiquen esta consulta pues no veo el error. nefy SQL 6 05-06-2004 17:59:06
AYUDA, por favor! Waldo Conexión con bases de datos 5 01-11-2003 17:49:02
ayuda por favor haffo Varios 2 14-10-2003 16:08:45


La franja horaria es GMT +2. Ahora son las 09:18:04.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi