SQL – Columna Acumuladora
Adaptación de artículo en http://sqltips.wordpress.com
La siguiente consulta lista los saldos de cuenta corriente, y agrega una columna con el total acumulado. Muy útil como por ejemplo, hacer una ABC de Clientes
La consulta a continuación:
Generando un Millón de registros
Fuente: “Generando un millón de registros en menos de un segundo”
La forma “natural” para generar 1M de números sería
With Base As
(
Select 1 as n
Union All
Select n+1 From Base Where n <1000000
)
select n from base
OPTION (MaxRecursion 0)
El método optimizado genera una primera tabla con la raiz cuadrada de los números a generar ( Base ), luego se aplica un cross join sobre si misma(tabla Expand ), que luego se numera con la tabla Nums ( usando la función Row_Number() )
Recuperando rango de filas con ROW_NUMBER()
Equivalente al limit de MySql
Ej.:
Recupera los registros 18 a 25 de la VTMCLH
SELECT ROW,VTMCLH_NROCTA
FROM
(SELECT ROW_NUMBER() OVER(ORDER BY VTMCLH_NROCTA DESC) AS Row,
VTMCLH_NROCTA
FROM VTMCLH) CLIENTES
WHERE ROW BETWEEN 18 AND 25
Principales 5 clientes por vendedor
Exportar una tabla a Excel sin tener el Office Instalado
fuente original: SqlTeam
Se hace usando el comando BCP.
El Store está modificado. Le agregué la opciónes
-C ANSI
-SServerName
El archivo aqui
SP_COLUMNAS2
Se pasa como parámetro la tabla y trae todos los campos separados por comas y agrega el FROM: servidor.dbo.tabla. Omite las columnas del tipo timestamp
CREATE PROCEDURE SP_COLUMNAS2
@TABLA VARCHAR(50)
-- Lista de las columnas de una tabla con comas
-- No trae las tipo timestamp
-- Desarrollado por Carlos Pedranti
-- Ultima Modificación: 31/10/2008
-- Ej. de Ejecución
-- Exec Sp_Columnas2 CJRMVI
AS
Lee más »
Funcion Usr_FN_PeriodAdd
Sirve para agregar meses a un Periodo.
Ej : tengo el campo Period con 200801 y quiere restarle 2 meses
SELECT dbo.USR_FN_PeriodAdd(-2,200801)
arroja
200711
Funcion para Numerar Semanas
La idea es clasificar las fechas en semanas dentro del año. En la zona fin de la última semana de un año y comienzo de la otra, se pasarán los días a la semana del año que tenga más días.
Ej: el 31/12/2001 ( lunes ) pasa a la primera semana del 2002
El 01 y 02 del año 2005 ( sábado y domingo ) pasan a la última semana del 2004.
Ejemplos
--SELECT DBO.Usr_FN_SemanaEstadistica('20011231') -->> lunes - 200201
--SELECT DBO.Usr_FN_SemanaEstadistica('20011230')-- 200152
--SELECT DBO.Usr_FN_SemanaEstadistica('20050101')-- 200453
--SELECT DBO.Usr_FN_SemanaEstadistica('20050102')--200453
--SELECT DBO.Usr_FN_SemanaEstadistica('20050103')--200501
--SELECT DBO.Usr_FN_SemanaEstadistica('20050109')--200501
Lee más »
SQL -Operaciones con Fechas
Algunas Técnicas Obtenidas de la revista SQLMagazine marzo 2007 – junio 2007 por Itzik Ben-Gan.
Años como Números Enteros
0 – es el 01/01/1900 que fue LUNES
1- 02/01/1900 MARTES
2- 03/01/1900 MIERCOLES
Recursividad en SQL 2005
muy buen artículo.
Dada una tabla con el id de empleado, su nombre y el id del jefe ( teniendo el gerente el mismo id de empleado que de jefe ) se necesita saber cuantas personas reportan a un jefe en particular.
Se da la solución usando Common Table Expression ( CTE ), y luego se eejmplifica la falla al intentar consultar la gente que reporta al gerente ( en el gráfico Alice, pero el autor se equivoca y dice que es Carol ).