Colocar nombre a columna segun una variable

21/06/2007 - 20:59 por Matias | Informe spam
Hola estimados, el tema es que en un select quiero colocar el nombre a
columna segun el contenido de una variable.

Tengo una tabla que siempre tiene un solo registro, entonces lo paso a una
variable:

DECLARE @nom CHAR(4)
SET @nom = (SELECT CASE col_1
WHEN 'S' THEN 'Nombre_1'
WHEN 'M' THEN 'Nombre_2'
END FROM tabla_param)

Luego para un select tengo que utilizar ese nombre para una columna, ej:

Select pepe as @nom from mi_tabla

Obiamente que esto me da error, hay alguna forma de solucionar sin cursores
o tablas temporales?

Deberia quedar algo asi, suponiendo que el dato de tabla_param es M:

Nombre_2

Dato1
Dato2
DatoX

Gracias por su valioso tiempo.

Preguntas similare

Leer las respuestas

#1 Federico A Colli
21/06/2007 - 21:10 | Informe spam
Hola, si el select (que usa dicho campo) no es muy complicado porque no usas
un CASE para hacer un select u otro (o varios en caso de que el nombre de la
columna sea variable), dependiendo el campo que encesites en cada caso? de
todas formas el campo a agregar en el select depende de la estructura de la
tabla, por lo tanto no será demasiado variable.

Otra alternativa es usar sql dinamico, pero antes que este personalmente
prefiero la otra alternativa.

Saludos
Carpe diem, tempus fugit.
El hombre sabio no da las respuestas correctas, propone las preguntas
correctas (Claude Levi-Strauss).
La sabiduría no es un producto de la educación sino de toda una vida por
adquirirla (Albert Einstein).
El sabio puede sentarse en un hormiguero, pero sólo el necio se queda
sentado en él (Proverbio chino).

AUS Federico A. Colli


"Matias" escribió en el mensaje
news:
Hola estimados, el tema es que en un select quiero colocar el nombre a
columna segun el contenido de una variable.

Tengo una tabla que siempre tiene un solo registro, entonces lo paso a una
variable:

DECLARE @nom CHAR(4)
SET @nom = (SELECT CASE col_1
WHEN 'S' THEN 'Nombre_1'
WHEN 'M' THEN 'Nombre_2'
END FROM tabla_param)

Luego para un select tengo que utilizar ese nombre para una columna, ej:

Select pepe as @nom from mi_tabla

Obiamente que esto me da error, hay alguna forma de solucionar sin
cursores o tablas temporales?

Deberia quedar algo asi, suponiendo que el dato de tabla_param es M:

Nombre_2

Dato1
Dato2
DatoX

Gracias por su valioso tiempo.



Respuesta Responder a este mensaje
#2 Matias
21/06/2007 - 22:27 | Informe spam
Gracias Federico, creo que entiendo, seria algo así; si en mi tabla
tabla_param tengo 5 valores posibles, debería hacer 5 case y un select
dentro de c/u poniendo el "AS Nombre_x" que corresponda.

Voy a analizar esa alternativa.


"Federico A Colli" escribió en el mensaje
news:%
Hola, si el select (que usa dicho campo) no es muy complicado porque no
usas un CASE para hacer un select u otro (o varios en caso de que el
nombre de la columna sea variable), dependiendo el campo que encesites en
cada caso? de todas formas el campo a agregar en el select depende de la
estructura de la tabla, por lo tanto no será demasiado variable.

Otra alternativa es usar sql dinamico, pero antes que este personalmente
prefiero la otra alternativa.

Saludos
Carpe diem, tempus fugit.
El hombre sabio no da las respuestas correctas, propone las preguntas
correctas (Claude Levi-Strauss).
La sabiduría no es un producto de la educación sino de toda una vida por
adquirirla (Albert Einstein).
El sabio puede sentarse en un hormiguero, pero sólo el necio se queda
sentado en él (Proverbio chino).

AUS Federico A. Colli


"Matias" escribió en el mensaje
news:
Hola estimados, el tema es que en un select quiero colocar el nombre a
columna segun el contenido de una variable.

Tengo una tabla que siempre tiene un solo registro, entonces lo paso a
una variable:

DECLARE @nom CHAR(4)
SET @nom = (SELECT CASE col_1
WHEN 'S' THEN 'Nombre_1'
WHEN 'M' THEN 'Nombre_2'
END FROM tabla_param)

Luego para un select tengo que utilizar ese nombre para una columna, ej:

Select pepe as @nom from mi_tabla

Obiamente que esto me da error, hay alguna forma de solucionar sin
cursores o tablas temporales?

Deberia quedar algo asi, suponiendo que el dato de tabla_param es M:

Nombre_2

Dato1
Dato2
DatoX

Gracias por su valioso tiempo.







Respuesta Responder a este mensaje
#3 Federico A Colli
21/06/2007 - 22:37 | Informe spam
Exacto, seria en todo caso un solo case con 5 WHEN, uno por cada campo,
siempre y cuando la consulta sea dentro de todo simple, ya que sino quedará
muy complicado el código.

Saludos
Carpe diem, tempus fugit.
El hombre sabio no da las respuestas correctas, propone las preguntas
correctas (Claude Levi-Strauss).
La sabiduría no es un producto de la educación sino de toda una vida por
adquirirla (Albert Einstein).
El sabio puede sentarse en un hormiguero, pero sólo el necio se queda
sentado en él (Proverbio chino).

AUS Federico A. Colli


"Matias" escribió en el mensaje
news:
Gracias Federico, creo que entiendo, seria algo así; si en mi tabla
tabla_param tengo 5 valores posibles, debería hacer 5 case y un select
dentro de c/u poniendo el "AS Nombre_x" que corresponda.

Voy a analizar esa alternativa.


"Federico A Colli" escribió en el mensaje
news:%
Hola, si el select (que usa dicho campo) no es muy complicado porque no
usas un CASE para hacer un select u otro (o varios en caso de que el
nombre de la columna sea variable), dependiendo el campo que encesites en
cada caso? de todas formas el campo a agregar en el select depende de la
estructura de la tabla, por lo tanto no será demasiado variable.

Otra alternativa es usar sql dinamico, pero antes que este personalmente
prefiero la otra alternativa.

Saludos
Carpe diem, tempus fugit.
El hombre sabio no da las respuestas correctas, propone las preguntas
correctas (Claude Levi-Strauss).
La sabiduría no es un producto de la educación sino de toda una vida por
adquirirla (Albert Einstein).
El sabio puede sentarse en un hormiguero, pero sólo el necio se queda
sentado en él (Proverbio chino).

AUS Federico A. Colli


"Matias" escribió en el mensaje
news:
Hola estimados, el tema es que en un select quiero colocar el nombre a
columna segun el contenido de una variable.

Tengo una tabla que siempre tiene un solo registro, entonces lo paso a
una variable:

DECLARE @nom CHAR(4)
SET @nom = (SELECT CASE col_1
WHEN 'S' THEN 'Nombre_1'
WHEN 'M' THEN 'Nombre_2'
END FROM tabla_param)

Luego para un select tengo que utilizar ese nombre para una columna, ej:

Select pepe as @nom from mi_tabla

Obiamente que esto me da error, hay alguna forma de solucionar sin
cursores o tablas temporales?

Deberia quedar algo asi, suponiendo que el dato de tabla_param es M:

Nombre_2

Dato1
Dato2
DatoX

Gracias por su valioso tiempo.












Respuesta Responder a este mensaje
#4 Miguel Egea
22/06/2007 - 00:28 | Informe spam
Auqque casi nunca digo de usar sqldinámico por el problema que puede suponer
la inyección de código, este parece precisamente el caso en que eso no puede
suceder

DECLARE @nom CHAR(10)
SET @nom = (SELECT CASE col_1
WHEN 'S' THEN 'Nombre_1'
WHEN 'M' THEN 'Nombre_2'
END FROM tabla_param)
declare @sql varchar(1000)
set @sql=' Select pepe as ' + @nom + ' from mi_tabla '
exec(@sql)

Saludos
Miguel Egea



"Matias" wrote in message
news:
Hola estimados, el tema es que en un select quiero colocar el nombre a
columna segun el contenido de una variable.

Tengo una tabla que siempre tiene un solo registro, entonces lo paso a una
variable:

DECLARE @nom CHAR(4)
SET @nom = (SELECT CASE col_1
WHEN 'S' THEN 'Nombre_1'
WHEN 'M' THEN 'Nombre_2'
END FROM tabla_param)

Luego para un select tengo que utilizar ese nombre para una columna, ej:

Select pepe as @nom from mi_tabla

Obiamente que esto me da error, hay alguna forma de solucionar sin
cursores o tablas temporales?

Deberia quedar algo asi, suponiendo que el dato de tabla_param es M:

Nombre_2

Dato1
Dato2
DatoX

Gracias por su valioso tiempo.


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida