Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   TRANSFORM de Acces -> SQL Server (https://www.clubdelphi.com/foros/showthread.php?t=17253)

fjcg02 30-12-2004 14:17:42

TRANSFORM de Acces -> SQL Server
 
Hola a todos,

Una preguntita. ¿ Existe algo similar al TRANSFORM de Access , o algo similar al DECODE de Oracle en SQL Server ?

Muchas gracias de antemano.

Un saludo

vtdeleon 31-12-2004 21:09:13

Saludos,

Cita:

Empezado por fjcg02
Una preguntita. ¿ Existe algo similar al TRANSFORM de Access , o algo similar al DECODE de Oracle en SQL Server ?

Tenia ese problema antes y la ayuda de SQL Query Analyzer tiene un ejemplo parecido con el CASE THEN

Ejemplo:

Tienes una tabla llama Pivot con esta estructura y contenido,
Código:

Year_____Quarter_____Amount
 1990______1__________ 1.1
 1990______2__________ 1.2
 1990______3__________ 1.3
 1990______4__________ 1.4
 1991______1__________ 2.1
 1991______2__________ 2.2
 1991______3__________ 2.3
 1991______4__________ 2.4

***********************************************************
Con esto:

Código SQL [-]
SELECT Year, 
 ____SUM(CASE Quarter WHEN 1 THEN Amount ELSE 0 END) AS Q1,
 ____SUM(CASE Quarter WHEN 2 THEN Amount ELSE 0 END) AS Q2,
 ____SUM(CASE Quarter WHEN 3 THEN Amount ELSE 0 END) AS Q3,
 ____SUM(CASE Quarter WHEN 4 THEN Amount ELSE 0 END) AS Q4
 FROM Pivot
 GROUP BY Year


puedes transformala a
Código:

Year___Q1____ Q2____Q3_____Q4
 1990____1.1____1.2____ 1.3____ 1.4
 1991____2.1____2.2____ 2.3____ 2.4

****************************************************

Se agrupa el Año 2 registros y los Quarter se convierten en Columnas (Q#)mostrando el contenido respectivo a cada año.


Espero ser claro y que te sirve

fjcg02 03-01-2005 08:38:44

Gracias, lo probaré cuando pueda, ya que ahora estoy a otros temas más urgentes e importantes == "HACER YA"

Un saludo

fjcg02 02-02-2005 17:22:25

Probado y funcionando.

Gracias por la ayudita, amiguetes

mayte mtz 23-09-2005 19:37:19

Es muy útil sólo que en mi caso una oficina puede tener movimiento hasta en 500 rutas y tendria que poner fijos los numeros de las rutas para poder convertirlas a columnas y si en algún momento se da de alta otra ruta pues tendría que estar modificando el query.
Voy a utilizar esto combinado con tablas temporales para almacenar el movimiento de cada ruta.
Michismias gracias me ayudo un chorral como decimos por aca en el Norte.
Saludos;)


Cita:

Empezado por vtdeleon
Saludos,

Tenia ese problema antes y la ayuda de SQL Query Analyzer tiene un ejemplo parecido con el CASE THEN

Ejemplo:

Tienes una tabla llama Pivot con esta estructura y contenido,
Código:

Year_____Quarter_____Amount
1990______1__________ 1.1
1990______2__________ 1.2
1990______3__________ 1.3
1990______4__________ 1.4
1991______1__________ 2.1
1991______2__________ 2.2
1991______3__________ 2.3
1991______4__________ 2.4

***********************************************************
Con esto:

Código SQL [-]
SELECT Year, 
____SUM(CASE Quarter WHEN 1 THEN Amount ELSE 0 END) AS Q1,
____SUM(CASE Quarter WHEN 2 THEN Amount ELSE 0 END) AS Q2,
____SUM(CASE Quarter WHEN 3 THEN Amount ELSE 0 END) AS Q3,
____SUM(CASE Quarter WHEN 4 THEN Amount ELSE 0 END) AS Q4
FROM Pivot
GROUP BY Year


puedes transformala a
Código:

Year___Q1____ Q2____Q3_____Q4
1990____1.1____1.2____ 1.3____ 1.4
1991____2.1____2.2____ 2.3____ 2.4

****************************************************

Se agrupa el Año 2 registros y los Quarter se convierten en Columnas (Q#)mostrando el contenido respectivo a cada año.


Espero ser claro y que te sirve


fjcg02 26-09-2005 21:48:43

Creo que si necesitas una consulta que tenga 500? columnas, tienes un fallo de analisis. No creo que nadie pueda sacar información válida de una fuente de información así.
Una consulta de este tipo, no creo que deba - bajo mi modesta opinión - sobrepasar el ancho de una hoja de papel apaisada.
Yo pondría las columnas

Por otro lado, si no sabes cuantas columnas vas a tener, creo que lo más conveniente es que la crees de modo dinámico; ya sabes, a base de hacer una consulta con las columnas que vas tener y otra que se construya con esa información

Consulta.SQL.Add( 'select campoA ');
n:= 1;
Consulta_de_campos.Open;
while not Consulta_de_campos.eof
begin
Consulta.SQL.Add( ', SUM(CASE Quarter WHEN '+Quotedstr(Consulta_de_campos.Fields[0].AsString)+' THEN COL'+inntostr(n)+' ELSE 0 END) AS COL'+inttosr(n));
Consulta_de_campos.next;
n++;
end
Consulta.SQL.Add( ' from tabla group by campoA');

Consulta.Open

Siendo Consulta la query que creas y consulta de campos una query que te de los campos que vas a tener 'select distinct campocolumna from tabla'

No está muy currado pero creo que se entiende

Espero que te sirva de ayuda.

Un saludete


La franja horaria es GMT +2. Ahora son las 00:58:27.

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