Otra Consulta SQL

06/06/2007 - 15:47 por Jose Gregorio Alvarez Regalado | Informe spam
Tengo una tabla de productos y estos tienen algunas caracteristicas que son
concurrentes, Por ejemplo.

Producto: X
Uso: Comercial
Industrial
Domestico

Producto Y
Uso Industrial

Para esto cree ademas de la tabla de productos una tabla con los tipos de
Uso y una tabla intermedia que me relaciona los IdProducto y IdUso

SELECT dbo.Usos.Uso
FROM dbo.Productos INNER JOIN
dbo.Producto_Usos ON dbo.Productos.IdProductos =
dbo.Producto_Usos.IdProductos INNER JOIN
dbo.Usos ON dbo.Producto_Tipos.IdUsos =
dbo.Usos.IdUsos
WHERE dbo.Productos.IdProducto = @IdProducto

Lo cierto es que para mostrarlo desearia poder convertir los diferentes
registros que me devuelve esta consulta en un solo string por ejemplo

Res = "Comercial, Industrial, Domestico"

Existe alguna forma de convertir un grupo de registros en uno solo?

Gracias de antemano

Preguntas similare

Leer las respuestas

#1 Nuno Santos
06/06/2007 - 16:17 | Informe spam
Que yo conozca no, pero por que no lo haces en el lenguage de programación
(asp, vb)?
Traes los registros repetidos ordenados por produto y despues haces un ciclo
y vas viendo e juntando los tipos...

NS

"Jose Gregorio Alvarez Regalado" wrote in message
news:
Tengo una tabla de productos y estos tienen algunas caracteristicas que
son concurrentes, Por ejemplo.

Producto: X
Uso: Comercial
Industrial
Domestico

Producto Y
Uso Industrial

Para esto cree ademas de la tabla de productos una tabla con los tipos de
Uso y una tabla intermedia que me relaciona los IdProducto y IdUso

SELECT dbo.Usos.Uso
FROM dbo.Productos INNER JOIN
dbo.Producto_Usos ON dbo.Productos.IdProductos =
dbo.Producto_Usos.IdProductos INNER JOIN
dbo.Usos ON dbo.Producto_Tipos.IdUsos =
dbo.Usos.IdUsos
WHERE dbo.Productos.IdProducto = @IdProducto

Lo cierto es que para mostrarlo desearia poder convertir los diferentes
registros que me devuelve esta consulta en un solo string por ejemplo

Res = "Comercial, Industrial, Domestico"

Existe alguna forma de convertir un grupo de registros en uno solo?

Gracias de antemano

Respuesta Responder a este mensaje
#2 Jose Gregorio Alvarez Regalado
06/06/2007 - 16:18 | Informe spam
Eso es lo que se me ocurrio hacer en un principio pero apenas estoy
empezando a usar asp.net y aun no logro entender bien los objetos de
datos... si puedes hecharme un cable te lo agradezco


Gracias de nuevo Nuno


"Nuno Santos" <nunos7@[REMOVER]hotmail.com> escribió en el mensaje
news:
Que yo conozca no, pero por que no lo haces en el lenguage de programación
(asp, vb)?
Traes los registros repetidos ordenados por produto y despues haces un
ciclo y vas viendo e juntando los tipos...

NS

"Jose Gregorio Alvarez Regalado" wrote in message
news:
Tengo una tabla de productos y estos tienen algunas caracteristicas que
son concurrentes, Por ejemplo.

Producto: X
Uso: Comercial
Industrial
Domestico

Producto Y
Uso Industrial

Para esto cree ademas de la tabla de productos una tabla con los tipos de
Uso y una tabla intermedia que me relaciona los IdProducto y IdUso

SELECT dbo.Usos.Uso
FROM dbo.Productos INNER JOIN
dbo.Producto_Usos ON dbo.Productos.IdProductos =
dbo.Producto_Usos.IdProductos INNER JOIN
dbo.Usos ON dbo.Producto_Tipos.IdUsos =
dbo.Usos.IdUsos
WHERE dbo.Productos.IdProducto = @IdProducto

Lo cierto es que para mostrarlo desearia poder convertir los diferentes
registros que me devuelve esta consulta en un solo string por ejemplo

Res = "Comercial, Industrial, Domestico"

Existe alguna forma de convertir un grupo de registros en uno solo?

Gracias de antemano





Respuesta Responder a este mensaje
#3 Nuno Santos
06/06/2007 - 18:32 | Informe spam
En asp.net soy un novato tambien, vamos a ver si alguno de los gurus de
ASP.NET de aqui del grupo te pueden ajudar.

NS

"Jose Gregorio Alvarez Regalado" wrote in message
news:
Eso es lo que se me ocurrio hacer en un principio pero apenas estoy
empezando a usar asp.net y aun no logro entender bien los objetos de
datos... si puedes hecharme un cable te lo agradezco


Gracias de nuevo Nuno


"Nuno Santos" <nunos7@[REMOVER]hotmail.com> escribió en el mensaje
news:
Que yo conozca no, pero por que no lo haces en el lenguage de
programación (asp, vb)?
Traes los registros repetidos ordenados por produto y despues haces un
ciclo y vas viendo e juntando los tipos...

NS

"Jose Gregorio Alvarez Regalado" wrote in
message news:
Tengo una tabla de productos y estos tienen algunas caracteristicas que
son concurrentes, Por ejemplo.

Producto: X
Uso: Comercial
Industrial
Domestico

Producto Y
Uso Industrial

Para esto cree ademas de la tabla de productos una tabla con los tipos
de Uso y una tabla intermedia que me relaciona los IdProducto y IdUso

SELECT dbo.Usos.Uso
FROM dbo.Productos INNER JOIN
dbo.Producto_Usos ON dbo.Productos.IdProductos =
dbo.Producto_Usos.IdProductos INNER JOIN
dbo.Usos ON dbo.Producto_Tipos.IdUsos =
dbo.Usos.IdUsos
WHERE dbo.Productos.IdProducto = @IdProducto

Lo cierto es que para mostrarlo desearia poder convertir los diferentes
registros que me devuelve esta consulta en un solo string por ejemplo

Res = "Comercial, Industrial, Domestico"

Existe alguna forma de convertir un grupo de registros en uno solo?

Gracias de antemano









Respuesta Responder a este mensaje
#4 marcosjroig
06/06/2007 - 19:03 | Informe spam
hola jorge:

valga la redundancia..yo tambien soy novato :) pero que abajo van mis
comentarios, a ver si como linea general sirve:

- con sql no conozco nada como para unificar varios registros en uno
solo. Por eso tenemos que valernos de la parte "Procedural"
- En la parte procedural entonces tenemos dos opciones:
- O lo haces con Procedimientos almacenados del Sql Server y pasas
un string bien grande con todo concatenado (soy amateur en
Proc.Almacenados tambien, no puedo pasarte el codigo, fijate en la
web)
- O unificas todo con el visual basic tratandolo como string
(tambien soy novato en esto :) )
- con Vb tambien podrias unificar todo en un array, pero si tu
intencion es tenerlo todo como un solo string despues tendrias que
pasarlo a string, no es optimo, pero en alguns circunstancias podria
ayudarte.

- Estas son mi ideas a nivel general..., no se si te incorpora algo
nuevo, espero sirve como una guia para saber donde buscar.

Y como decia Nuno, esperemos a que los Expertos en el tema nos
respondan.

Saludos,

Marcos
Respuesta Responder a este mensaje
#5 Jose A. Fernandez
07/06/2007 - 06:19 | Informe spam
Hola Jose Gregorio
Te comento como lo tenemos implementado en algunos proyectos esta
"necesidad que detectaste" de concatenar filas en el sqlserver

Supongamos que necesitamos realizar esto en SQL
Tenemos algo asi

UsuarioId UsuarioNombre PerfilDesc
1 Jose Admin
1 Jose SuperAdmin :)
1 Jose Boquense
2 Nuno Admin
2 Nuno Usuario Avanzado
3 Marcos Admin
3 Marcos Usuario Avanzado

y quieres que salga algo asi
1 Jose Admin, SuperAdmin :), Boquense
2 Nuno Admin, Usuario Avanzado
3 Marcos Admin, Usuario Avanzado

Viene a nuestra ayuda las FUNCIONES del SQLSERVER aunque preferiria
realizar esto en el codigo de mi aplicacion para dejar al sql dejar
hacer su trabajo, recuperarme los datos lo mas rapidamente posible.
Pero bueno como ejemplo me parece bueno (luego te envio otro ejemplo
que usamos en unos proyectos)

Por ejemplo para concatenar los perfiles

CREATE FUCTION ConcatenarPerfiles (@UsuarioId int, optional @Separador
= ',')
RETURNS varchar(500)
AS
BEGIN
DECLARE @vCadena varchar(500)
SELECT
@vCadena = COALESCE(@vCadena + @Separador, '') + P.PerfilDesc
FROM Perfiles P
INNER JOIN Perfiles_Usuarios PU
ON P.PerfilId = PU.PerfilId
INNER JOIN Usuarios U
ON PU.UsuarioId = U.PerfilId
WHERE
U.UsuarioId=@UsuarioId
ORDER BY P.PerfilDesc

RETURN @vCadena
GO


Luego para utilizarlo

SELECT
UsuarioId,
UsuarioNombre,
dbo.ConcatenarPerfiles(UsuarioId, ',')
FROM Usuarios


Lo que nos dimos cuenta que en consultas bastantes complejas algunas
funciones que implementabamos no agregaban ningun beneficio, era mejor
colocar este codigo dentro del mismo procedimiento y no mediante
funciones, ya que parece que no implementa ningun mecanismo de
estrategia, pero bueno es otro tema.
Tengo funciones en SQL pero cuando es solo para manipular registros y
que me devuelvan en algun formato o por ejemplo sencillo un TRIM (que
no lo tenemos en SQL2000) pero tengo ufnciones que calculan por
ejemplo el saldo de un cliente y me lo trae...
(estos son simple cometarios que se me vienen a la memoria ...:) ...)

Enlaces:
-
COALESCE (Transact-SQL)
Devuelve la primera expresión distinta de NULL entre sus argumentos.
http://msdn2.microsoft.com/es-es/library/ms190349(SQL.90).aspx

Espero que te sirva de ayuda o guia
______________________
Jose A. Fernandez




On 6 jun, 10:03, wrote:
hola jorge:

valga la redundancia..yo tambien soy novato :) pero que abajo van mis
comentarios, a ver si como linea general sirve:

- con sql no conozco nada como para unificar varios registros en uno
solo. Por eso tenemos que valernos de la parte "Procedural"
- En la parte procedural entonces tenemos dos opciones:
- O lo haces con Procedimientos almacenados del Sql Server y pasas
un string bien grande con todo concatenado (soy amateur en
Proc.Almacenados tambien, no puedo pasarte el codigo, fijate en la
web)
- O unificas todo con el visual basic tratandolo como string
(tambien soy novato en esto :) )
- con Vb tambien podrias unificar todo en un array, pero si tu
intencion es tenerlo todo como un solo string despues tendrias que
pasarlo a string, no es optimo, pero en alguns circunstancias podria
ayudarte.

- Estas son mi ideas a nivel general..., no se si te incorpora algo
nuevo, espero sirve como una guia para saber donde buscar.

Y como decia Nuno, esperemos a que los Expertos en el tema nos
respondan.

Saludos,

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