Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Columna Acumulada en SQL Server 2008: solucionar el problema de la sumatoria corriente, Apuntes de Programación de Bases de Datos

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

Antes del 2010

Subido el 02/09/2021

notch5153
notch5153 🇩🇴

1 documento

1 / 4

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
26/6/2019 Columna Acumulada en SQL Server 2008
https://social.msdn.microsoft.com/Forums/es-ES/0b09fbbd-7542-4004-b888-4808cb28d5fd/columna-acumulada-en-sql-server-2008?forum=sqlse
1/4
Se unió Mar 2008
Conversaciones d…
Mostrar actividad
Principales respuestas
77,015
Puntos
Superior 0.1%
Hunchback
MCC, MVP
Formular una pregunta
Acceso rápido
Buscar conversaciones
relacionadas
Buscar preguntas del foro
3 5 13
Acceso a Datos>
Columna Acumulada en SQL Server 2008
Pregunta
0
Inicie
sesión
para
votar
Responder |Citar
lunes, 9 de enero de 2012 13:25
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 SQL2008
Espero me puedan ayudar.
Respuestas
0
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:
- Usar un cursor
- Crear una funcion de agregacion SQLCLR
- Usar un query correlacionado
- Usar JOIN consigo mismo (self join)
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?
SQL Server
Developer Network Iniciar sesión Suscripciones a MSDN Obtener herramientas
Más información
Este sitio utiliza cookies para análisis y para mostrar contenido y anuncios personalizados. Al continuar navegando por este sitio, aceptas este uso.
Descargas Programas Comunidad Documentación
pf3
pf4

Vista previa parcial del texto

¡Descarga Columna Acumulada en SQL Server 2008: solucionar el problema de la sumatoria corriente y más Apuntes en PDF de Programación de Bases de Datos solo en Docsity!

Se unió Mar 2008 Conversaciones d… Mostrar actividad

Principales respuestas

Puntos Superior 0.1%

Hunchback

MCC, MVP

Formular una pregunta

Acceso rápido

Buscar conversaciones relacionadas

Buscar preguntas del foro

3 5 13

Acceso a Datos >

Columna Acumulada en SQL Server 2008

Pregunta

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.

Respuestas

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:

  • Usar un cursor
  • Crear una funcion de agregacion SQLCLR
  • Usar un query correlacionado
  • Usar JOIN consigo mismo (self join)

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?

SQL Server

Developer Network Iniciar sesión^ Suscripciones a MSDN^ Obtener herramientas

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

Descargas Programas Comunidad Documentació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

*/

AMB

Some guidelines for posting questions...

Marcado como respuesta Eduardo Portescheller Moderator miércoles, 11 de enero de 2012 12:

Todas las respuestas

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

AMB

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