Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-12-2004
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
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
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #2  
Antiguo 31-12-2004
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
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

Última edición por vtdeleon fecha: 23-07-2005 a las 06:33:43.
Responder Con Cita
  #3  
Antiguo 03-01-2005
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Gracias, lo probaré cuando pueda, ya que ahora estoy a otros temas más urgentes e importantes == "HACER YA"

Un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #4  
Antiguo 02-02-2005
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Probado y funcionando.

Gracias por la ayudita, amiguetes
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #5  
Antiguo 23-09-2005
mayte mtz mayte mtz is offline
Miembro
 
Registrado: sep 2005
Posts: 31
Poder: 0
mayte mtz Va por buen camino
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
Responder Con Cita
  #6  
Antiguo 26-09-2005
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
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
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -

Última edición por fjcg02 fecha: 26-09-2005 a las 22:00:18.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 11:56:51.


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