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

Duda en consulta de agrupación

Estas en el tema de Duda en consulta de agrupación en el foro de SQL Server en Foros del Web. Hola! No se si es posible hacer este tipo de consulta directamente con SQL, os expongo el problema: Dispongo de dos tablas Respuestas ID , ...
  #1 (permalink)  
Antiguo 14/06/2007, 03:45
 
Fecha de Ingreso: diciembre-2005
Mensajes: 3
Antigüedad: 18 años, 5 meses
Puntos: 0
Duda en consulta de agrupación

Hola!

No se si es posible hacer este tipo de consulta directamente con SQL, os expongo el problema:


Dispongo de dos tablas

Respuestas
ID, PUNTO, RESPUESTA


Puntos
ID, PUNTO_NOMBRE

Necesito hacer una consulta en la que se me muestren los distintos puntos separados por guiones en los que se ha dado una respuesta.

Por ejemplo:

Si tengo los datos:

Respuestas
ID, PUNTO, RESPUESTA
1, 22, casa
2, 24, coche
3, 56, casa
4, 99, casa
5, 12, libro
6, 66, papel
5, 11, libro

Puntos
ID, PUNTO_NOMBRE
22, nombre_a
24, nombre_b
56, nombre_c
99, nombre_d
12, nombre_e
66, nombre_f
11, nombre_g


Necesitaría una consulta que mostrase:

casa, 22--56--99
coche, 24
libro, 12--11
papel, 66


Sería posible?
Gracias.
  #2 (permalink)  
Antiguo 24/07/2007, 09:41
 
Fecha de Ingreso: junio-2006
Mensajes: 109
Antigüedad: 17 años, 10 meses
Puntos: 2
Re: Duda en consulta de agrupación

Código:
SET NOCOUNT ON
DECLARE @Respuestas TABLE
(ID int, PUNTO int, RESPUESTA varchar(10))

INSERT INTO @Respuestas(ID, PUNTO, RESPUESTA)
VALUES(1, 22, 'casa')
INSERT INTO @Respuestas(ID, PUNTO, RESPUESTA)
VALUES(2, 24, 'coche')
INSERT INTO @Respuestas(ID, PUNTO, RESPUESTA)
VALUES(3, 56, 'casa')
INSERT INTO @Respuestas(ID, PUNTO, RESPUESTA)
VALUES(4, 99, 'casa')
INSERT INTO @Respuestas(ID, PUNTO, RESPUESTA)
VALUES(5, 12, 'libro')
INSERT INTO @Respuestas(ID, PUNTO, RESPUESTA)
VALUES(6, 66, 'papel')
INSERT INTO @Respuestas(ID, PUNTO, RESPUESTA)
VALUES(5, 11, 'libro')

DECLARE @TablaPorRespuesta TABLE
(RowId int identity(1,1), RESPUESTA varchar(10), Puntos varchar(50))

INSERT INTO @TablaPorRespuesta(RESPUESTA, Puntos)
SELECT RESPUESTA,''
FROM @Respuestas
GROUP BY RESPUESTA

DECLARE @RowId int, @MaxRowId int, @Puntos varchar(50)

SET @RowId = 1
SELECT @MaxRowId = Count(1)
FROM @TablaPorRespuesta

WHILE @RowId <= @MaxRowId
BEGIN
	SET @Puntos = ''
	SELECT @Puntos = @Puntos + convert(varchar,Punto) + '--'
	FROM @TablaPorRespuesta TR
	INNER JOIN @Respuestas R
	ON TR.Respuesta = R.Respuesta
	WHERE @RowId = RowId
	Order by Punto

	UPDATE @TablaPorRespuesta SET Puntos = LEFT(@Puntos,LEN(@Puntos)-2)
	WHERE @RowId = RowId
	
	SET @RowId = @RowId + 1
END

SELECT Respuesta + ',' + Puntos AS Resultado
FROM @TablaPorRespuesta
Order by Respuesta

SET NOCOUNT OFF
Suerte
  #3 (permalink)  
Antiguo 26/07/2007, 21:24
Avatar de Gabo77  
Fecha de Ingreso: noviembre-2006
Mensajes: 381
Antigüedad: 17 años, 5 meses
Puntos: 6
Re: Duda en consulta de agrupación

una funcioncita tambien ayuda

Código:
SET NOCOUNT ON
CREATE TABLE Respuestas
(ID int, PUNTO int, RESPUESTA varchar(10))

CREATE FUNCTION FnObtenerString
(
	@RESPUESTA AS VARCHAR(50)
) RETURNS VARCHAR(100)
AS
BEGIN
	DECLARE @RETVALUE AS VARCHAR(100)

	SET @RETVALUE = ''

	SELECT @RETVALUE = @RETVALUE + CAST(PUNTO AS VARCHAR) + '--'
	FROM RESPUESTAS
	WHERE RESPUESTA = @RESPUESTA

	RETURN @RETVALUE
	
END

INSERT INTO Respuestas(ID, PUNTO, RESPUESTA)
VALUES(1, 22, 'casa')
INSERT INTO Respuestas(ID, PUNTO, RESPUESTA)
VALUES(2, 24, 'coche')
INSERT INTO Respuestas(ID, PUNTO, RESPUESTA)
VALUES(3, 56, 'casa')
INSERT INTO Respuestas(ID, PUNTO, RESPUESTA)
VALUES(4, 99, 'casa')
INSERT INTO Respuestas(ID, PUNTO, RESPUESTA)
VALUES(5, 12, 'libro')
INSERT INTO Respuestas(ID, PUNTO, RESPUESTA)
VALUES(6, 66, 'papel')
INSERT INTO Respuestas(ID, PUNTO, RESPUESTA)
VALUES(5, 11, 'libro')

SELECT RESPUESTA, DBO.FnObtenerString(RESPUESTA)
FROM RESPUESTAS
GROUP BY RESPUESTA
__________________
Hicimos un pacto con Dios... El no desarrolla Sistemas y nosotros no hacemos milagros....
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 02:15.