Retroceder   Foros del Web > Programación para sitios web > Bases de Datos > SQL Server

Respuesta
 
Herramientas Desplegado
Antiguo 14-jun-2007, 03:45   #1 (permalink)
swasman no se puede cailificar en este momento
 
Fecha de Ingreso: diciembre-2005
Mensajes: 3
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.
swasman está desconectado   Responder Citando
Antiguo 24-jul-2007, 09:41   #2 (permalink)
juantiva ha deshabilitado el karma
 
Fecha de Ingreso: junio-2006
Mensajes: 89
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
juantiva está desconectado   Responder Citando
Antiguo 26-jul-2007, 21:24   #3 (permalink)
Gabo77 sólo puede mejorar
 
Avatar de Gabo77
 
Fecha de Ingreso: noviembre-2006
Mensajes: 352
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....
Gabo77 está desconectado   Responder Citando
Respuesta

No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 12:45.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93