Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   SQL Server (http://www.forosdelweb.com/f87/)
-   -   Duda en consulta de agrupación (http://www.forosdelweb.com/f87/duda-consulta-agrupacion-497821/)

swasman 14/06/2007 03:45

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.

juantiva 24/07/2007 09:41

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

Gabo77 26/07/2007 21:24

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



La zona horaria es GMT -6. Ahora son las 02:53.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.