Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

consulta maestro-detalle

Estas en el tema de consulta maestro-detalle en el foro de SQL Server en Foros del Web. tengo una tabla llamada MAESTRO con esta estructura. M1, xxx, xxx, sss M2, sss,ddd,fff,fff M3, dsdfsddd, dsds, dsds, dsdd M4, ddadasdd, dsds, dsds, dsdd M5, ...
  #1 (permalink)  
Antiguo 19/07/2013, 05:39
 
Fecha de Ingreso: enero-2002
Mensajes: 1.438
Antigüedad: 22 años, 3 meses
Puntos: 0
consulta maestro-detalle

tengo una tabla llamada MAESTRO con esta estructura.

M1, xxx, xxx, sss
M2, sss,ddd,fff,fff
M3, dsdfsddd, dsds, dsds, dsdd
M4, ddadasdd, dsds, dsds, dsdd
M5, dsddsdsd, dsds, dsds, dsdd

y otra tabla llamada DETALLE con esta estructura, de dos únicos campos

M1, D1
M1, D2
M1, D3
M2, D1
M3, D4
M5, D1


y necesitaría sacar una listado del tipo:

M1, (D1, D2, D3)
M2, (D1)
M3, (D4)
M4, ( )
M5, (D1)


estoy muy viejo y ya no me aclaro o es q me he liado yo solito.
  #2 (permalink)  
Antiguo 19/07/2013, 06:29
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 11 años, 9 meses
Puntos: 40
Respuesta: consulta maestro-detalle

De hecho, me parece que yo soy el mas viejo en este foro; sin embargo - intenta esto con Detalle:
Código SQL:
Ver original
  1. SELECT  T.Col1,
  2.         Stuff((SELECT ','+Col2 AS [text()]
  3.                 FROM DETALLE T1
  4.                 WHERE T1.Col1=T.Col1
  5.                 ORDER BY Col2
  6.                 FOR XML Path('')), 1, 1, '') AS name
  7. FROM    DETALLE T
  8. GROUP BY T.Col1
Si te funciona correctamente - haz Left Join con Maestro (Maestro Left join la subconsulta On Maestr.Col1=sub consulta.Col1).
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #3 (permalink)  
Antiguo 19/07/2013, 07:54
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: consulta maestro-detalle

tambien se podria hacer con un coalesce() y una funcion que te regrese lo que necesitas :P
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #4 (permalink)  
Antiguo 19/07/2013, 08:00
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 11 años, 9 meses
Puntos: 40
Respuesta: consulta maestro-detalle

Cita:
Iniciado por Libras Ver Mensaje
tambien se podria hacer con un coalesce() y una funcion que te regrese lo que necesitas :P
Estas seguro que el Coalesce te sirve en este caso?
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #5 (permalink)  
Antiguo 19/07/2013, 08:10
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: consulta maestro-detalle

sip y para muestra un boton:

Código SQL:
Ver original
  1. CREATE TABLE datos
  2. (
  3. dato1 VARCHAR(20),
  4. dato2 VARCHAR(20)
  5. )
  6.  
  7. INSERT INTO datos VALUES ('M1', 'D1')
  8. INSERT INTO datos VALUES ('M1', 'D2')
  9. INSERT INTO datos VALUES ('M1', 'D3')
  10. INSERT INTO datos VALUES ('M2', 'D1')
  11. INSERT INTO datos VALUES ('M3', 'D4')
  12. INSERT INTO datos VALUES ('M5', 'D1')
  13.  
  14.  
  15. CREATE FUNCTION dbo.fn_return_nombre(@dato2 VARCHAR(MAX))
  16. RETURNS VARCHAR(MAX)  WITH schemabinding  
  17. AS
  18. BEGIN
  19. DECLARE @groups AS VARCHAR(MAX)
  20. SELECT @groups=COALESCE(@groups + ', ', '') + dato2 FROM dbo.datos
  21. WHERE dato1=@dato2
  22. RETURN @groups
  23. END
  24.  
  25.  
  26. SELECT dato1,dbo.fn_return_nombre(dato1) FROM datos
  27. GROUP BY dato1

A y claro faltaria hacer el left join a la tabla maestro para que aparezca el M4 jejejeje :P

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #6 (permalink)  
Antiguo 20/07/2013, 07:09
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 11 años, 9 meses
Puntos: 40
Respuesta: consulta maestro-detalle

Tienes razon!
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog

Etiquetas: tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:04.