


Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Encuentra los documentos específicos para los exámenes de tu universidad
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
El documento discute sobre la necesidad de resolver el problema de la sumatoria corriente (running total) en sql server 2008, donde se presentan cuatro métodas posibles: usar un cursor, crear una función sqlclr, usar un query correlacionado o usar join consigo mismo (self join). Se recomienda la nueva funcionalidad de funciones de ventanas (subclausulas rows / range en la clausula over) disponible a partir de la versión 2012.
Tipo: Apuntes
1 / 4
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!



Se unió Mar 2008 Conversaciones d… Mostrar actividad
Principales respuestas
Puntos Superior 0.1%
Acceso rápido
Buscar conversaciones relacionadas
Buscar preguntas del foro
3 5 13
Inicie sesión para votar
Responder | Citar
lunes, 9 de enero de 2012 13:
ChrisPasache 30 Puntos
Buenos dias, espero me puedan ayudar:
En mi tabla movimientos de pedido manejo un campo 'cantidad' y otro 'tipomovimiento'
He obtenido uniendo 2 consultas, este resultado:
Producto Ingreso Salida
p001 200 0
p001 0 50
p001 0 70
en pocas palabras me coloca valor si en la tabla movimiento es de tipo ingreso en la columna ingreso , y 0 si no lo es.
Quiero añadir una columna 'Acumulado' donde me tiene que mostrar de esta manera
Producto Ingreso Salida Acumulado
p001 200 0 200
p001 0 50 150
p001 0 70 80
Solo que no hallo la manera de hacerlo, los parametros que quiero ingresar desde Visual 2010 son la fecha de inicio, fecha final y CodigoProducto, solo me falta la columna acumulado. Trabajo con SQL
Espero me puedan ayudar.
Inicie sesión para votar
Esto se conoce como total corriente (running total), y hasta la version 2008 R2 la mayoria de las soluciones basadas en conjunto, tienden a tener mal desempeño cuando el numero de filas en la tabla es un valor significativo.
Entre los diferentes metodos para resolver este problema se tiene:
A partir de la nueva version 2012 (todavia no disponible en el mercado), contamos con la nueva funcionalidad de funciones de ventanas (subclausula ROWS / RANGE en la clausula OVER), la cual nos permite de una forma facil y legible, resolver este problema.
Dicho lo anterior, es prundente comentar que para lo que deseas hacer, se necesita un orden chronologico de cada transaccion. Por ejemplo, como sabes que el ingreso de 200 unidades para el producto "p001" ocurrio primero que el egreso de 150 unidades?
Este sitio utiliza cookies para análisis y para mostrar contenido y anuncios personalizados. Al continuar navegando por este sitio, aceptas este uso. Más información
Responder | Citar
lunes, 9 de enero de 2012 14:
Hunchback Bank of America Merchant... (MCC, MVP)^ 77,015 Puntos
Deberas tener una columna tipo datetime o un numero incremental, etc, que identifique cada transaccion.
Ejemplo:
DECLARE @T TABLE ( sk int NOT NULL IDENTITY (1, 1) UNIQUE CLUSTERED, producto varchar(10) NOT NULL, tipo_mov CHAR(1) NOT NULL CHECK (tipo_mov in ('I', 'E')), fecha_mov datetime NOT NULL, valor int NOT NULL CHECK (valor > 0) );
INSERT INTO @T (producto, tipo_mov, fecha_mov, valor) VALUES ('p001', 'I', '2012-01-01T08:30:00', 200), ('p001', 'E', '2012-01-01T08:35:00', 50), ('p001', 'E', '2012-01-01T08:40:00', 70);
SELECT A.producto, fecha_mov, tipo_mov, CASE WHEN A.tipo_mov = 'I' THEN valor ELSE 0 END AS ingreso, CASE WHEN A.tipo_mov = 'E' THEN valor ELSE 0 END AS salida, ( SELECT SUM(CASE WHEN B.tipo_mov = 'I' THEN 1 ELSE -1 END * B.valor) FROM @T AS B WHERE B.producto = A.producto AND ( B.fecha_mov < A.fecha_mov OR (B.fecha_mov = A.fecha_mov AND B.sk <= A.sk) ) ) AS acumulado FROM @T AS A ORDER BY A.producto, A.fecha_mov, A.sk; GO
/*
producto fecha_mov tipo_mov ingreso salida acumulado p001 2012-01-01 08:30:00.000 I 200 0 200 p001 2012-01-01 08:35:00.000 E 0 50 150 p001 2012-01-01 08:40:00.000 E 0 70 80
*/
Some guidelines for posting questions...
Marcado como respuesta Eduardo Portescheller Moderator miércoles, 11 de enero de 2012 12:
Esto se conoce como total corriente (running total), y hasta la version 2008 R2 la mayoria de las soluciones basadas en conjunto, tienden a tener mal desempeño cuando el numero de filas en la tabla es un valor significativo.
Responder | Citar
lunes, 9 de enero de 2012 14:
Hunchback Bank of America Merchant... (MCC, MVP)^ 77,015 Puntos
Some guidelines for posting questions...
Marcado como respuesta Eduardo Portescheller Moderator miércoles, 11 de enero de 2012 12:
0 Inicie sesión para votar
Responder | Citar
miércoles, 11 de enero de 2012 15:
ChrisPasache 30 Puntos
Gracias por la respuesta, voy a probarlo.
Saludos.
Centros de desarrollo
Windows
Office
Visual Studio
Microsoft Azure
Más...
Recursos de aprendizaje Microsoft Virtual Academy Channel 9 MSDN Magazine
Comunidad Foros Blogs Codeplex
Soporte técnico Autoasistencia
Programas BizSpark (para empresas nuevas) Microsoft Imagine (for students) Microsoft en la Educación
España (Español) Boletín Privacidad y cookies Términos de uso Marcas comerciales © 2019 Microsoft