none
CONSULTA REFERENCIAS CRUZADAS RRS feed

  • Pregunta

  • Buenos dias, despues de dar muchas vueltas al asunto y buscar, buscar y buscar soy incapaz de obtener un respuesta, tengro un sentencia SQL que utilizo en access y funciona pero con sql server 2008 soy incapaz, el error es tiene que ver con  PIVOT.

    ADJUNTO SENTENCIA:

    TRANSFORM SUM(IMPORTE) AS TOTAL
    SELECT Fecha
    FROM TLiquidacion
    GROUP BY FECHA
    PIVOT CONDUCTOR

     

    Saludos y Gracias


    forlanfor
    jueves, 28 de abril de 2011 5:43

Respuestas

Todas las respuestas

  • Hola.

    En SQL Server, sería más o menos así:

    SELECT Fecha, [Conductor1], [Conductor2], [Conductor3]
    FROM 
    (SELECT Fecha, Conductor, Importe
    FROM TLiquidacion) p
    PIVOT
    (
    SUM (Importe)
    FOR Conductor IN
    ( [Conductor1], [Conductor2], [Conductor3])
    ) AS pvt
    
    

    Como ves, has de conocer los nombres de los conductores a priori. Tienes más detalles y ejemplos aquí:

    http://msdn.microsoft.com/es-es/library/ms177410.aspx

    http://www.elguille.info/NET/ADONET/firmas_salva_Pivot_Unpivot.htm

    Si no lo logras, nos dices.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.blogspot.es/ Sígueme en twitter en http://twitter.com/qwalgrande

    jueves, 28 de abril de 2011 6:44
    Moderador
  • Buenos dias y gracias por tu interes, estuve mirando los ejemplos pero entendi como bien dices que debes de conocerte bien los conductores, pero en mi tabla de tliquidacion iguan tengo 25 o 50 puedo hacer la consulta introduciendo e nombre de los conductores.

    SELECT Fecha, [Conductor1], [Conductor2], [Conductor3]

     

    En las consultas de referencias cruzadas Access o tablas dinamicas en Excel cojo la tabla antes habiendo realizado un filtrado de datos y con ellos en la cabezera de la columna los conductores, en el encabezado de las filas las fechas y el cento la recaudacion sumada.

     

    Saludos Forlanfor.


    forlanfor
    lunes, 2 de mayo de 2011 7:32
  • Con permiso de Alberto,

    has de conocer los nombres porque en SQL Server has de poner la clausula

    FOR Conductor IN
    ( [Conductor1], [Conductor2], [Conductor3])
    ) AS pvt

    donde conductor1,... son los nombres de los conductores entre corchetes.  Eso no es necesario en access. Si los conoces de antemano genial, si no.. podemos ayudarte a construir esa sentencia de forma dinámica.

    Nos cuentas


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    lunes, 2 de mayo de 2011 10:01
    Moderador
  • Buenos dias Miguel, gracias por el interes, los conducotores varian altas, bajas el dato no es fijo  por ese motivo me hace falta que la sentecia busque los conductores y me los escriba en las columnas tantos conductores este dados de alta.

     

     

    Saludos Forlanfor.

     

     


    forlanfor
    lunes, 2 de mayo de 2011 11:32
  • Hola.

    Si no sabes cuáles son, ni siquiera cuántos, se puede hacer, sin duda, pero no es la solución más sencilla para tu problema. Realiza una agrupación normal y corriente (por conductor y fecha) y luego, en la capa de presentación, traspones filas por columnas. ¿Existe algo que te impida realizarlo de esa forma?

    Te dejo una referencia que puede servirte para decidir por ti mismo cuál es la forma ideal de afrontar este tema (en el apartado "Dynamic Pivot Table Queries"):

    http://www.kodyaz.com/articles/t-sql-pivot-tables-in-sql-server-tutorial-with-examples.aspx

    Por contra, tu consulta sería:

    SELECT Fecha, Conductor, sum(Importe) as Importe
    FROM TLiquidacion
    GROUP BY Fecha, Conductor
    ORDER BY Fecha, Conductor
    

    De todos modos, déjanos saber qué tal te va y por qué opción te inclinas finalmente.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.blogspot.es/ Sígueme en twitter en http://twitter.com/qwalgrande

    lunes, 2 de mayo de 2011 14:02
    Moderador
  • Gracias, creo que obtare por la opcion  facilitada en el primer post , mas adelante ya probare con las dinamicas que realmete es la que me interesa.

     

    Saludos y Gracias. 


    forlanfor
    martes, 3 de mayo de 2011 4:46
  • Buenos dias, respecto a la referencia que me facilitaste  "Dynamic Pivot Table Queries", la adapte y consigo que se ejecute, la comprobacion de la sintaxis no da error, pero no puedo verla en  sqlserver2008, tambien la ejecuto desde una aplicion realizada en Visual Studio  2008 y tampoco la muestra en el datagridview.

     

    Dim da As OleDbDataAdapter = New OleDbDataAdapte
    
    ("DECLARE @PivotColumnHeaders VARCHAR(MAX) SELECT   @PivotColumNHeaders = COALESCE (@PivotColumnHeaders + ',[ ' + cast(nombre AS varchar) + ' ]','[ ' + cast(nombre AS VARCHAR) + ']') " & _
    
    "FROM PEDIDOS DECLARE @PivotTableSql varchar(max) SET @pivottablesql = N' SELECT * FROM(SELECT NOMBRE,CANTIDAD,TOTALVENTA FROM PEDIDOS ) AS PIVOTDATA " & _
    
    "PIVOT ( SUM(TOTALVENTA)FOR NOMBRE IN (' + @PivotColumnHeaders + ')) as @pivottable' EXECUTE (@PIVOTTABLESQL)", myConnOLEDB)
     
    
    Saludos y Gracias
    forlanfor
    miércoles, 11 de mayo de 2011 6:16
  • Hola.

    No nos dices qué error recibes. En cualquier caso, creo que es mejor que inicies otro hilo con esta nueva cuestión.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.blogspot.es/ Sígueme en twitter en http://twitter.com/qwalgrande

    miércoles, 11 de mayo de 2011 7:01
    Moderador
  • yo tambén lo necesitaba, muchas gracias!
    viernes, 13 de abril de 2012 13:54