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

Pivot Dinamico y Filas con Texto

Estas en el tema de Pivot Dinamico y Filas con Texto en el foro de SQL Server en Foros del Web. Hola foro Tengo un problema, necesito hacer un Pivot dinamico (es decir, pasar mis filas de una consulta a Titulos de una consulta) pero digo ...
  #1 (permalink)  
Antiguo 12/11/2008, 15:35
Avatar de Fann_Lavigne  
Fecha de Ingreso: diciembre-2004
Mensajes: 622
Antigüedad: 19 años, 4 meses
Puntos: 12
Pivot Dinamico y Filas con Texto

Hola foro

Tengo un problema, necesito hacer un Pivot dinamico (es decir, pasar mis filas de una consulta a Titulos de una consulta) pero digo dinamico, ya que los valores de las filas que quiero como columnas son valores desconocidos para mi, mas aparte que mi otro valor, el de las filas, es texto, no es numero, y por lo tanto no puedo usar SUM o alguna funcion para agrupar los valores.

Mi consultar normal regresaria las siguientes columnas:

Ususario Comment
user1 AAA
user1 AAB
user2 BBB
user2 BBC

Y lo que deceo obtener es

user1 user2
AAA BBB
AAB BBC

Recordando que mi columna Comment no es numerica, ambas son texto y aparte, las filas de la columna Usario pueden cambiar a valores desconocidos.

Espero me puedan ayudar, gracias.
__________________
"Entre Mas Brillante Es Una Mente, Tiene Que Luchar Contra Demonios Internos Mas Poderosos"
[email protected]
  #2 (permalink)  
Antiguo 13/11/2008, 09:37
Avatar de -rommel_  
Fecha de Ingreso: junio-2008
Ubicación: Lima
Mensajes: 360
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: Pivot Dinamico y Filas con Texto

aqui en esta pagina te enseña como implementar tu Pivot Dinamico... asi como en esta pagina ke te envio (que es la primera ke encontre) hay muchas otras que te enseñan

http://geeks.ms/blogs/ozonicco/archi...-225-mico.aspx
  #3 (permalink)  
Antiguo 13/11/2008, 09:39
Avatar de -rommel_  
Fecha de Ingreso: junio-2008
Ubicación: Lima
Mensajes: 360
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: Pivot Dinamico y Filas con Texto

pero si tienes especificamente un problema, porke no pones tu consulta completa y te ayudamos...
  #4 (permalink)  
Antiguo 13/11/2008, 11:24
Avatar de Fann_Lavigne  
Fecha de Ingreso: diciembre-2004
Mensajes: 622
Antigüedad: 19 años, 4 meses
Puntos: 12
Respuesta: Pivot Dinamico y Filas con Texto

Aqui esta mi consulta

Código:
ALTER PROCEDURE [dbo].[sp_Comments]
    --Paramtros de nuestro SP separados por comas.
    (@ID int)
AS
BEGIN
    DECLARE @Names NVARCHAR(MAX)
    SET  @Names =''
    SELECT @Names = @Names + '[' + Nombre + '],'
    FROM         (SELECT DISTINCT Usuarios.User_Name AS Nombre
        FROM Ticket_Approvals INNER JOIN
                      Usuarios ON Ticket_Approvals.Ticket_Approval_By = Usuarios.User_ID
        WHERE      Ticket_ID = @ID) dd

    --Comprobamos ke la longitud de @Names sea mayor a cero
    IF (LEN(@Names)>0)
        BEGIN
            SET @Names = LEFT(@Names, LEN(@Names) -1)
            EXEC ('SELECT * FROM (SELECT Usuarios.User_Name As Nombre, (CASE Ticket_Detail_Approved WHEN ''TRUE'' THEN ''Aprobado'' ELSE ''Rechazado'' END) + ' + ''' - ''' + ' + Ticket_Approval_Reason As Status FROM Ticket_Approvals INNER JOIN Usuarios ON Ticket_Approvals.Ticket_Approval_By = Usuarios.User_ID
            WHERE Ticket_ID =' + @ID + ') pvt PIVOT (Max([Status]) FOR [Nombre] IN (' + @Names + ')) AS Child')
        END
END
La cual es una implementacion del Pivot Dinamico, eso ya lo vi, ya lo hice, el probla es que yo en ningun ,omento manejo filas o columna con Numeros, todas son texto, por ende, las funciones SUM no me sirven, usando Max solo me regresa una registro, cuando deberian ser 4 por ejemplo.

Mi problema no esta en el Pivot Dinamico, eso esta facil, el problema esta en que mis filas nunca son numericas, no necesito hacer SUM, solo pasar de filas a columnas textos.
__________________
"Entre Mas Brillante Es Una Mente, Tiene Que Luchar Contra Demonios Internos Mas Poderosos"
[email protected]
  #5 (permalink)  
Antiguo 13/11/2008, 12:16
Avatar de Fann_Lavigne  
Fecha de Ingreso: diciembre-2004
Mensajes: 622
Antigüedad: 19 años, 4 meses
Puntos: 12
Respuesta: Pivot Dinamico y Filas con Texto

Aqui dejo una posible respuestal, la cual me esta funcionando, solo es una variante de lo de arriba, pero jala bien.

Código:
DECLARE @Names NVARCHAR(MAX)
SET  @Names =''
SELECT @Names = @Names + '[' + Nombre + '],'
    FROM         (SELECT DISTINCT Usuarios.User_Name AS Nombre
        FROM Ticket_Approvals INNER JOIN
                      Usuarios ON Ticket_Approvals.Ticket_Approval_By = Usuarios.User_ID
        WHERE      Ticket_ID = 3) dd

--PRINT @GroupBy
--print LEN(@Names)

IF (LEN(@Names)>0)
    BEGIN
        SET @Names = LEFT(@Names, LEN(@Names) -1)
        EXEC ('SELECT *
                FROM (SELECT Ticket_Detail_ID, Usuarios.User_Name As Nombre, 
                        Ticket_Detail_Status + ' + ''' - ''' + ' + Ticket_Approval_Reason As Status 
                        FROM Ticket_Approvals INNER JOIN Usuarios ON Ticket_Approvals.Ticket_Approval_By = Usuarios.User_ID
                        WHERE Ticket_ID= 3 GROUP BY Ticket_Approvals.Ticket_Detail_ID, 
                                            Usuarios.User_Name, 
                        Ticket_Approvals.Ticket_Detail_Status + ' + ''' - ''' + ' + Ticket_Approvals.Ticket_Approval_Reason) pvt 
            PIVOT (Max([Status]) FOR [Nombre] IN (' + @Names + ')) AS Child
            GROUP BY Ticket_Detail_ID, ' + @Names)
    END
__________________
"Entre Mas Brillante Es Una Mente, Tiene Que Luchar Contra Demonios Internos Mas Poderosos"
[email protected]
  #6 (permalink)  
Antiguo 17/11/2010, 20:35
 
Fecha de Ingreso: septiembre-2010
Mensajes: 2
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Pivot Dinamico y Filas con Texto

Cita:
Iniciado por Fann_Lavigne Ver Mensaje
Aqui dejo una posible respuestal, la cual me esta funcionando, solo es una variante de lo de arriba, pero jala bien.

Código:
DECLARE @Names NVARCHAR(MAX)
SET  @Names =''
SELECT @Names = @Names + '[' + Nombre + '],'
    FROM         (SELECT DISTINCT Usuarios.User_Name AS Nombre
        FROM Ticket_Approvals INNER JOIN
                      Usuarios ON Ticket_Approvals.Ticket_Approval_By = Usuarios.User_ID
        WHERE      Ticket_ID = 3) dd

--PRINT @GroupBy
--print LEN(@Names)

IF (LEN(@Names)>0)
    BEGIN
        SET @Names = LEFT(@Names, LEN(@Names) -1)
        EXEC ('SELECT *
                FROM (SELECT Ticket_Detail_ID, Usuarios.User_Name As Nombre, 
                        Ticket_Detail_Status + ' + ''' - ''' + ' + Ticket_Approval_Reason As Status 
                        FROM Ticket_Approvals INNER JOIN Usuarios ON Ticket_Approvals.Ticket_Approval_By = Usuarios.User_ID
                        WHERE Ticket_ID= 3 GROUP BY Ticket_Approvals.Ticket_Detail_ID, 
                                            Usuarios.User_Name, 
                        Ticket_Approvals.Ticket_Detail_Status + ' + ''' - ''' + ' + Ticket_Approvals.Ticket_Approval_Reason) pvt 
            PIVOT (Max([Status]) FOR [Nombre] IN (' + @Names + ')) AS Child
            GROUP BY Ticket_Detail_ID, ' + @Names)
    END

el codigo q pusiste me fue muy util para solucionar un problema similar muchas gracias
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 01:47.