No video

Función Pivot en SQL Server

Microsoft dice de la función pivot: “PIVOT gira una expresión con valores de tabla convirtiendo los valores únicos de una columna de la expresión en varias columnas en la salida y realiza agregaciones donde son necesarias en cualquier valor de columna restante que se desee en la salida final”.

Пікірлер: 35

  • @oliviachan15
    @oliviachan153 жыл бұрын

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

  • @gabrieleduardolamprea6314
    @gabrieleduardolamprea6314 Жыл бұрын

    Gracias crack

  • @alejandrosantibanez9610
    @alejandrosantibanez96103 жыл бұрын

    gracias video

  • @raulvallejo1951
    @raulvallejo19513 жыл бұрын

    Muchas gracias hermano, Excelente material!!!! 2020

  • @christianzamora515
    @christianzamora515 Жыл бұрын

    Muchas gracias por realizar el pivot con esas consultas 🤓

  • @MiguelRivera-vm3kl
    @MiguelRivera-vm3kl10 ай бұрын

    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

    10 ай бұрын

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

  • @josereynelchauxperez947
    @josereynelchauxperez9476 жыл бұрын

    Excelente material, michas gracias !!!

  • @RobertoRuiz-bw8ln
    @RobertoRuiz-bw8ln9 жыл бұрын

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

  • @alextagle9907
    @alextagle99078 жыл бұрын

    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

  • @codigoloa2828
    @codigoloa28283 жыл бұрын

    wey muy grande

  • @RobertoRuiz-bw8ln
    @RobertoRuiz-bw8ln5 жыл бұрын

    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
    @joseelsonarguetaavalos85534 жыл бұрын

    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 жыл бұрын

    Solo con lo que indicas crea un procedimiento almacenado

  • @diegoviveros05
    @diegoviveros059 жыл бұрын

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

  • @visoalgt

    @visoalgt

    9 жыл бұрын

    +Diego Viveros Trabajaremos en ello. Saludos!

  • @planeta_musica
    @planeta_musica9 жыл бұрын

    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

    5 жыл бұрын

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

  • @EdRawrDev5813
    @EdRawrDev58135 жыл бұрын

    super bueno me sacaste de un aprieto

  • @MauricioMoM
    @MauricioMoM8 жыл бұрын

    buenisimo! gracias =)

  • @aquilinorodriguez1565
    @aquilinorodriguez15657 жыл бұрын

    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 жыл бұрын

    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

  • @sistobi
    @sistobi9 жыл бұрын

    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
    @paola11927 жыл бұрын

    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
    @jorgerosalesmario9 жыл бұрын

    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