SQL - Unir campos en SQL

 
Vista:

Unir campos en SQL

Publicado por Vikinga (4 intervenciones) el 17/08/2007 17:26:23
Hola, necesito ayuda por favor
Necesito unir los datos de 3 tablas en un solo campo, mis tablas son
clientes:
IDCLIENTE NOMBRE PATERNO MATERNO
MOR01 ANA LUNA OREA
MOR03 ANGEL SANCHEZ JIMENEZ
MOR05 POLO ADAN ROMEO

Referido
IDREF IDCLIENTE IDTIENDAENVIA IDTIENDAREF
1 MOR01 17035 17033
2 MOR03 17035 17033
3 MOR05 17035 17003

TIENDA
IDTIENDA ESTADO
17003 MICHOACAN
17033 JALISCO
17035 MORELOS

Necesito obtener la siguiente información
TIENDAREF REFERIDOS CLIENTES
(Cuantos clientes) (Nombres clientes)
17033 2 ANA LUNA OREA, ANGEL SANCHEZ JIMENEZ
17003 1 POLO ADAN ROMEO

Ya pude obtener cuantos clientes por tiendaref pero no he logrado colocar en el campo clientes los nombres de todos los clientes que ser refieron a las diferentes tiendas, me aparecen uno por campo :(

Alguien podría ayudarme?? apenas tengo una semana con sql y ya me están pidiendo ese ejercicio y no se como hacerle.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Unir campos en SQL

Publicado por Isaias (5072 intervenciones) el 17/08/2007 20:51:18
¿Es SQL SERVER?, ¿Que version?

¿Sabes que puedes tener problemas si tus NOMBRES son demasiados?, ¿Cuantos nombres MAXIMO por TIENDAREF podrias tener?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Unir campos en SQL

Publicado por Vikinga (4 intervenciones) el 17/08/2007 21:03:39
Hola
Tengo SQL Server 2005
Y tienes razón seguramente habrá problemas si son muchos los nombres pero es una práctica que tengo que entregarle al profesor pero no se como hacerla :(, la base de datos es de prueba así que por el momento tenemos registrados como a 25 clientes esparcidos en varios estados, calculo que saldrán como 3 o 4 nombres por cada tienda de referencia.

Muchas gracias por contestarme, espero puedas ayudarme!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Unir campos en SQL

Publicado por Isaias (5072 intervenciones) el 17/08/2007 23:35:37
Ok, Vikinga, lo que tu quieres hacer se llama PIVOT, en SQL SERVER 2005, existe ya una instruccion para hacerlo. Te pongo el ejemplo que viene en la ayuda en linea de SQL SERVER 2005.

USE AdventureWorks;
GO
SELECT VendorID, [164] AS Emp1, [198] AS Emp2, [223] AS Emp3, [231] AS Emp4, [233] AS Emp5
FROM
(SELECT PurchaseOrderID, EmployeeID, VendorID
FROM Purchasing.PurchaseOrderHeader) p
PIVOT
(
COUNT (PurchaseOrderID)
FOR EmployeeID IN
( [164], [198], [223], [231], [233] )
) AS pvt
ORDER BY VendorID

-- Resultado:
VendorID Emp1 Emp2 Emp3 Emp4 Emp5
1 4 3 5 4 4
2 4 1 5 5 5
3 4 3 5 4 4
4 4 2 5 5 4
5 5 1 5 5 5
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Unir campos en SQL

Publicado por Vikinga (4 intervenciones) el 20/08/2007 14:49:59
Hola Isaias:

La instrucción de Pivot que me mencionas, me da como resultado información por columnas, pero no me une en una sola columna todos los nombres de los clientes :(

Creo que mi fuerte no es la programación de cualquier manera si puedes seguir ayudándome te lo agradecería mucho, yo sigo investigando para ver si logro hacerlo.

Mil gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Unir campos en SQL

Publicado por Isaias (5072 intervenciones) el 20/08/2007 17:57:18
Veamos

DECLARE @Nombre VARCHAR(8000)

SELECT ID, @Nombre = @Nombre+Nombre
FROM Tutabla
GROUP BY ID

Dime si eso te funciona.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Unir campos en SQL

Publicado por Vikinga (4 intervenciones) el 21/08/2007 18:33:25
Hola: no se pudo, pero encontré un código en la red como un procedimiento, todavía no lo pruebo, aunque lo que me pidieron es una función, tal vez puedas ayudarme ahora a convertirlo en función.

Producto: idProducto, Nombre, idProcedencia, etc.
Procedencia: idProcedencia, Descripcion.
Modelo: idModelo, Descripcion.
ModeloProducto: idModelo, idProducto.
quisiera que muestre el Nombre del producto + descripcion de su procedencia + descripciones de sus modelos.

CREATE PROCEDURE Concatenar
@idProd int,
@salida varchar(100) output
as
Declare @Descripcion varchar(20)

Declare MiCursor Cursor For
SELECT Modelo.Descripcion from Modelo, ModeloProducto where Modelo.idModelo = ModeloProducto.idModelo and ModeloProducto.idProducto = @idProd
Open MiCursor
Fetch Next From MiCursor
Into @Descripcion
if @@Fetch_status = 0
begin
set @salida = ' '
Declare @contador int
set @contador = 1
While @@Fetch_status = 0
Begin
if @contador = 1
set @salida = @Descripcion
else
set @salida = @salida + ', ' + @Descripcion

set @contador = @contador +1
Fetch Next From MiCursor
Into @Descripcion
end
end
else
begin
Close MiCursor
Deallocate MiCursor
return(1)
end
Close MiCursor
Deallocate MiCursor
GO
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Unir campos en SQL

Publicado por Isaias (5072 intervenciones) el 22/08/2007 20:18:14
¿Que es lo que debe ser una FUNCION?, la obtencion de TODAS LAS DESCRIPCIONES de tus MODELOS?

-- Creo mi funcion

CREATE FUNCTION fn_ObtineDescripcionModelos (@idModelo int)
RETURNS VARCHAR(1000)
AS
BEGIN
DECLARE @Descripcion VARCHAR(1000)
SET @Descripcion = ''
SELECT @Descripcion = @Descripcion+','+Descripcion FROM Modelo WHERE idModelo = @idModelo
SELECT ISNULL(@Descripcion, 'SIN DESCRIPCION')
RETURN(@Descripcion)
END

-- Pruebo la funcion
SELECT Producto.Nombre, Procedencia.Descripcion, dbo.fn_ObtineDescripcionModelos(ModeloProducto.idModelo)
FROM Producto JOIN Procedencia ON Producto.idProcedencia = Procedencia.idProcedencia
JOIN ModeloProducto ON ModeloProducto.idProducto = Producto.idProducto
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar