Siempre me han gustado los trucos, los tips, los retos, y este era uno de los que hasta que ví el truco del maestro Itzik Ben Gan no era tan sencillo de resolver.

El truco en sí no es demasiado complejo (cuando te lo han explicado), el truco consiste en hacer join con una tabla que simplemtne tenemos de comodín en nuestras bases de datos (yo ya lo pongo en todas), la tabla se llama nums y contiene los valores del 1 al N (en el ejemplo al 10000), a partir de ahí, la imaginación hace el resto.

Aquí teneis el código, está escrito para SQL 2005.

 

use pruebas

go

 

drop table demo

 

drop table nums

go

 

create table demo (id smallint identity(1,1) primary key,

 

foo char(20) not null default ‘hola’)

 

go

 

declare @i int

set @i=10

 

while @i>0

begin

 

insert into demo default values

 

set @i=@i1

end

 

go

 

 

insert into demo (foo) values(‘Dos’)

 

insert into demo (foo) values(‘Tres’)

 

go

 

create table nums (num smallint)

 

go

 

with Recu(id) as

 

(

 

select 1 as id

union all

 

select id +1 from Recu where id<10000

 

)

 

insert into nums(num)

 

select id from Recu option(maxrecursion 0)

 

go

 

select d.*

From demo d

inner join nums n

on case d.foo when ‘Dos’ then 2 when ‘Tres’ then 3 else 1 end>=n.num

 

 

Jesús López, el SQL Ranger, mandó también este código, también es divertido 🙂

CREATE FUNCTION GenerateNumbers(

 

@n int

 

) RETURNS TABLE

AS RETURN (

 

WITH CTE(n)

 

AS

 

(

 

SELECT 1 AS n

UNION ALL

 

SELECT n + 1 AS n

FROM CTE

WHERE n < @n

)

 

SELECT TOP(@n) n

FROM CTE

 

)

 

GO

 

CREATE TABLE T (

 

Field varchar(50),

 

Records int

 

)

 

GO

 

INSERT INTO T VALUES(‘Record 1’, 1)

 

INSERT INTO T VALUES(‘Record 2’, 0)

 

INSERT INTO T VALUES(‘Record 3’, 2)

 

INSERT INTO T VALUES(‘Record 4’, 3)

 

GO

 

SELECT T.*

 

FROM T CROSS APPLY GenerateNumbers(Records)

 

OPTION (MAXRECURSION 0)

 

0 Shares:
Deja una respuesta

Tu dirección de correo electrónico no será publicada.

You May Also Like

Carga de Slowly Changing Dimensions y tabla de Hechos con atributos de Tipo 2 (Parte 2 de 3)

Este es el segundo post de la serie en el que explicaremos como cargar nuestra tabla de Hechos a partir de una dimensión con atributos de Tipo 2, usando dos maneras diferentes, una de ellas será mediante un componente “Look Up” con caché parcial y la otra opción será usando un componente “Merge Join” con un “Conditional Split” para seleccionar el registro que se encuentra en el rango de fechas correcto. Para mas información sobre qué es un atributo de Tipo 2 y sobre como cargar la dimensión que usaremos en este ejemplo puedes consultar el primer post de la serie.
Leer más

Depurar aplicaciones contra datos de producción: ofuscación y GDPR

¿Cómo trabajas con tus bases de datos en producción? ¿Y en entornos de desarrollo? Las organizaciones manejan un enorme volumen de datos personales en sus plataformas de datos y documentos electrónicos digitalizados y físicos que custodian. El 90% de los documentos que las empresas almacenan tiene algún tipo de información de carácter personal. ¿Estás tomando las medidas adecuadas para proteger la información sensible, como exige la normativa? La ofuscación puede ayudarte a cumplir con la GDPR. En este artículo te contamos cómo.
Leer más

Web Scraping de páginas dinámicas con Selenium, Python y Beautifulsoup

El Web Scraping es una técnica de obtención de datos de páginas web. Existen variedad de usos; algunos de los más extendidos pueden ser el de motores de búsqueda para analizar webs y clasificarlas, o portales de compras que chequean los precios de la competencia para poder tomar decisiones basadas en esa información. Te explicamos como llevarlo a la práctica con Selenium, Python y Beautifulsoup en Azure Data.

Más ejemplos de validación de datos con T-SQL

¿Cómo validas que los datos están proporcionando la información correcta? La validación es un aspecto imprescindible en tus proyectos. ¡Toma nota! A veces podemos realizar conteos a tablas muy grandes que llevan mucho tiempo, o necesitamos comprobar si existe una tabla o un campo dentro de una tabla, o poder comparar los resultados de 2 consultas distintas. Hoy veremos ejemplos de estos casos empleando diferentes técnicas y ejemplos prácticos con T-SQL para detectar posibles errores y su validación.