Función Pivot en SQL Server

Поделиться
HTML-код
  • Опубликовано: 25 дек 2024

Комментарии • 35

  • @oliviachan15
    @oliviachan15 3 года назад

    Muchas gracias, buscaba en muchas partes y no mas no le entendía pivot ... eres un genio explicando

  • @christianzamora515
    @christianzamora515 Год назад +1

    Muchas gracias por realizar el pivot con esas consultas 🤓

  • @raulvallejo1951
    @raulvallejo1951 4 года назад

    Muchas gracias hermano, Excelente material!!!! 2020

  • @josereynelchauxperez947
    @josereynelchauxperez947 6 лет назад

    Excelente material, michas gracias !!!

  • @MauricioMoM
    @MauricioMoM 8 лет назад +1

    buenisimo! gracias =)

  • @gabrieleduardolamprea6314
    @gabrieleduardolamprea6314 Год назад

    Gracias crack

  • @EdRawrDev5813
    @EdRawrDev5813 6 лет назад

    super bueno me sacaste de un aprieto

  • @alejandrosantibanez9610
    @alejandrosantibanez9610 3 года назад

    gracias video

  • @RobertoRuiz-bw8ln
    @RobertoRuiz-bw8ln 9 лет назад

    La funcion PIVOT y WITH se puede utilizar en SQL Server 2000 ??

  • @alextagle9907
    @alextagle9907 9 лет назад

    Disculpa visoalgt si utilizo el pivot y quiero quitar los valores nulos, ya sea cambiarlos a cero o reemplazarlos por algún otro valor varchar o entero se puede ???????
    de verdad lo necesito

  • @diegoviveros05
    @diegoviveros05 9 лет назад +1

    No tendrías algún tutorial para cube y rollup master?

    • @visoalgt
      @visoalgt  9 лет назад +1

      +Diego Viveros Trabajaremos en ello. Saludos!

  • @codigoloa2828
    @codigoloa2828 3 года назад

    wey muy grande

  • @MiguelRivera-vm3kl
    @MiguelRivera-vm3kl Год назад

    Al momento de usar el ORDER BY despues del pivot solo me funciona solo para una de las filas creadas. No sé si te suceda lo mismo. 7:08

    • @visoalgt
      @visoalgt  Год назад

      Tendria que convertir su pivot a una vista y luego odenarla por cualquier columna.

  • @RobertoRuiz-bw8ln
    @RobertoRuiz-bw8ln 5 лет назад

    Tengo Sql Server 2008 r2. Y el pivot no quiere funcionar en una columna con valores negativos.

    • @visoalgt
      @visoalgt  5 лет назад

      No debería ser problema los valores negativos, para tener mas detalle únete a facebook.com/groups/SQLSERVERLATAM/ y comparte tu problema para que te pueda colaborar y entender de que se trata

  • @joseelsonarguetaavalos8553
    @joseelsonarguetaavalos8553 4 года назад

    Tengo que realizar un reporte y en ese realizar comparación de ingresos por planilla (2 planillas) , el código de planilla deberá ser el encabezado de cada columna, ademas esos códigos de la planilla serán parámetros,.. Como puedo realizar eso!?

    • @vhcardenas
      @vhcardenas 4 года назад +1

      Solo con lo que indicas crea un procedimiento almacenado

  • @aquilinorodriguez1565
    @aquilinorodriguez1565 7 лет назад

    Hola Victor tengo una consulta con respecto a un reporte que estoy tratando de hacer.
    Tengo la siguiente consulta:
    Select T3.Itemcode AS Referencia,T3.CodeBars as UPC,T3.ItemName as Descripcion,
    sum(T1.Quantity)Cantidad,Datepart(yyyy,T0.DocDate)as Anio,DATEPART(mm, T0.DocDate) as Mes
    From INV1 T1 inner join OINV T0 on T0.Docentry = T1.DocEntry
    inner join OITM T3 on T1.ItemCode = T3.Itemcode
    where (T0.DocDate BETWEEN '2016-07-01' and '2017-07-30')and T1.WhsCode = '01'
    group by T3.Itemcode,T3.CodeBars,T3.ItemName,T0.DocDate,Datepart(yyyy,T0.DocDate),DATEPART(mm, T0.DocDate)
    El Resultado es algo como esto:
    Referencia UPC Descripcion Cantidad Anio Mes
    000015 0002390000015 VAPORUB JAR ORG 12/6oz 63 2017 1
    00002665 4017941026651 30871 MST ID POCKET WITH 4 CC 200 2016 11
    00002760 4017941027603 25200 BOHEME BLK RED STN BP 15 2016 7
    00002851 4017941028518 P146 LEGRAND PLATINO PLUMA FUENTE 1 2016 12
    00002865 4017941028655 P163 CLASSIQUE PLAT FI BK RB 5 2016 8
    00005020 4017941050205 23364 SLTR CLASSIQUE DOUE BLK STEELBP 2 2017 4
    00005096 4017941050960 25300 RB BOHEME ROUGE MID SIZE 20 2016 7
    00005524 30661 BILLETERA CON 9CC 1 2016 12
    00005524 30661 BILLETERA CON 9CC 1 2017 3
    00005525 4017941055255 30662 BILLFOLD 6CC MONEY CLIP 1 2016 8
    00005525 4017941055255 30662 BILLFOLD 6CC MONEY CLIP 1 2016 12
    00005525 4017941055255 30662 BILLFOLD 6CC MONEY CLIP 1 2017 6
    00005796 4017941057969 BOHEME BLEU WITH SAPPHIRE RB 25330 1 2016 9
    00007162 4017941200822 BILLFOLD CALF LEATHER 11CC W / ID 1 2016 12
    00007163 BILLFOLD 8CC CALF LEATHER 1 2016 12
    00007163 BILLFOLD 8CC CALF LEATHER 1 2017 3
    00007165 NULL MST BILLFOLD 14CC ZIP COINPURSE 10 2016 7
    00007167 4017941200877 MST BUSINESS CARD HLDR 2CC 1 2016 12
    Lo que quiero lograr es que se muestre la venta de cada articulo en un periodo de tiempo
    de la siguiente manera
    Referencia UPC Descripcion Enero 200x febrero 200x...Dic 200x enero 200x
    00002760 4017941027603 SLTR CLASSIQUE DOUE BLK STEELBP xxx xxxx
    Que muestre en cada mes cuanto se vendio de cada producto en el periodo, creo que el pivot seria la solución pero no se como hacer que se agrupe por año y mes.
    Agradecería si me pudieras dar alguna luz con respecto a mi pregunta.
    saludos desde Panamá

    • @visoalgt
      @visoalgt  7 лет назад

      Podrias concatenar el año y mes de dos maneras, uno con la funcion concat que seria concat(DATEPART(mm, T0.DocDate), '-', DATEPART(yyyy,T0.DocDate)) o simplemente usando el operador + DATEPART(mm, T0.DocDate)+ '-'+ DATEPART(yyyy,T0.DocDate, concatenado el mes y la fecha este nuevo campo te puede servir para agrupar.

    • @aquilinorodriguez1565
      @aquilinorodriguez1565 7 лет назад

      Lo hice asi : DateName(month,T0.DocDate) + ' ' +DateName(year,T0.DocDate) y parece funcionar, lo único es que tengo que escribir cada mes y año en el query, existe alguna forma de hacer lo automatico?
      Select * from (select * from [#TablaTest])s
      Pivot ( max(Cantidad) for [fechacompleta]in ([July 2016],[August 2016],[September 2016],[October 2016],
      [November 2016],[December 2016],[January 2017],[February 2017],[March 2017],[April 2017],[May 2017],
      [June 2017])) P
      Saludos y gracias por el dato.

    • @visoalgt
      @visoalgt  7 лет назад +1

      Colocar un select dentro de los paréntesis no es posible, pero podrías crear un sql dinámico que construya los valores que necesitas dentro del paréntesis, por ejemplo el emplo del video con sql dinámico quedaría así:
      DECLARE @anios NVARCHAR(400)
      SET @anios =''
      SELECT @anios = @anios + '[' + T.anio + '],'
      from (Select distinct cast ((datepart(yyyy, orderdate)) as varchar(150)) as anio from orders ) as T
      SET @anios = LEFT(@anios, LEN(@anios) -1)
      Exec ('
      Select * from
      (Select c.categoryName, datepart(yyyy, o.orderdate) as anio
      , (d.unitprice * d.quantity) as total
      from categories as c inner join products as p on c.categoryid=p.categoryid
      inner join [order details] as d on d.productid=p.productid
      inner join orders as o on o.orderid=d.orderid
      ) as T
      Pivot (sum(Total) for anio in ('+ @anios +')) as pvt')

    • @aquilinorodriguez1565
      @aquilinorodriguez1565 7 лет назад

      Lo intento y te comento como me va con eso, gracias por tu tiempo y videos, son buenisimos, yo estoy tratando de verlos todos.
      saludos

  • @planeta_musica
    @planeta_musica 9 лет назад +2

    tengo sql server 2008 y se me presento el siguiente error
    Mens. 102, Nivel 15, Estado 1, Línea 14
    Sintaxis incorrecta cerca de '('.
    investigando lo solucione con el siguiente codigo que sirve parra modificar la compatibilidad de la base de datos
    ALTER DATABASE northwind
    SET COMPATIBILITY_LEVEL = 100
    despues se ejecuta el query y funciona

    • @EdRawrDev5813
      @EdRawrDev5813 6 лет назад

      me acaba de pasar lo mismo, puedes intentar con un select previo, es decir ' select * from (tuselectelchido) as x pivot .... etc... ' suerte

  • @sistobi
    @sistobi 9 лет назад

    muy bueno gracias y como pondria los años automatico sin que escriba si tuviera mas años en listas

    • @Zwaqquen
      @Zwaqquen 7 лет назад

      Ve su nuevo vídeo, dice como hacerlo dinámico.

  • @paola1192
    @paola1192 7 лет назад

    Estimado, bueno su video. Tengo un caso que no he podido resolver... podria ayudarme? Tengo un pivote dinamico que funciona pero quiero utilizar sus resultados ojala para crear una vista. Tengo entendido que podría si primero creo una tabla temporal. ¿Podría decirme cómo por favor? Este es el código:
    declare @attr varchar(max)declare @sql varchar(max)set @attr=''set @sql='
    select
    RUT_Trabajador, NumLiqs, Año, Mes,
    #attr#
    from
    (
    SELECT [Filtrar Inv_Liq_calculadas_20_le].RUT_Trabajador, [Filtrar Inv_Liq_calculadas_20_le].NumLiqs, [Filtrar Inv_Liq_calculadas_20_le].Año, [Filtrar Inv_Liq_calculadas_20_le].Mes, [Filtrar Inv_Liq_calculadas_20_le].Items_trabajadores, Sum([Filtrar Inv_Liq_calculadas_20_le].Valor) AS SumaDeValor
    FROM rem.[Filtrar Inv_Liq_calculadas_20_le]
    GROUP BY [Filtrar Inv_Liq_calculadas_20_le].RUT_Trabajador, [Filtrar Inv_Liq_calculadas_20_le].NumLiqs, [Filtrar Inv_Liq_calculadas_20_le].Año, [Filtrar Inv_Liq_calculadas_20_le].Mes, [Filtrar Inv_Liq_calculadas_20_le].Items_trabajadores
    ) as source pivot(
    sum(SumaDeValor)
    for Items_trabajadores in (
    #attr#
    )
    ) as SumaDeValor
    '
    select @attr=@attr+'['+V.Items_trabajadores+'],'from (
    select distinct Items_trabajadores from rem.[Filtrar Inv_Liq_calculadas_20_le]
    ) as V
    set @attr=SUBSTRING(@attr,0,len(@attr))
    set @sql=REPLACE(@sql,'#attr#',@attr)
    print @sql
    exec(@sql)

    • @visoalgt
      @visoalgt  7 лет назад

      Mil disculpas por no contestar antes, yo he utilizado pivots dentro de funciones y procedimientos almacenados y reutilizado los valores devueltos

    • @ampardo17
      @ampardo17 Год назад

      @@visoalgt y 5 años despues consulto. ¿tendrías un ejemplo de cómo hacer eso? Reutilizar los campos de PIVOT (sin hacer INSERT INTO una tabla global con ##). Gracias

  • @jorgerosalesmario
    @jorgerosalesmario 9 лет назад

    With Ventas (compañia, año, total) as
    (
    Select
    c.companyname, DATEPART(YYYY, o.orderdate) as año, SUM(d.unitprice*d.quantity)
    from
    Customers as c
    inner join [Orders] as o on c.CustomerID=o.CustomerID
    inner join [Order Details] as d on o.OrderID=d.OrderID
    group by
    c.CompanyName, DATEPART(YYYY, o.OrderDate)
    )
    select * from Ventas
    Pivot (
    SUM (Total)
    For año in ([1996],[1997],[1998])
    ) PVTVENTAS
    y al ejecutarlo me da error en la lina del sum
    Mens. 102, Nivel 15, Estado 1, Línea 14
    Sintaxis incorrecta cerca de '('.
    gracias y por la ayuda que das en tu canal

    • @visoalgt
      @visoalgt  9 лет назад

      He copiado y pegado en mi SQL tu script y funciona perfecto, la pregunta que me surge es que version de SQL estas usando?

    • @jorgerosalesmario
      @jorgerosalesmario 9 лет назад

      Gracias por responder, la versión es 2014

    • @jorgerosalesmario
      @jorgerosalesmario 9 лет назад

      visoalgt buena tarde buscando soluciones encontré que lo que lo que debía actualizar era el nivel de compatibilidad y ejecute el siguiente comando EXEC sp_dbcmptlevel 'DatabaseName', 100 luego ejecute el query y corrió a la perfección gracias por tus videos que como a mi a muchos que nos gusta esto de las bases de datos aprendemos de este material que publicas saludos