studio programacion móviles libros libro desarrollo desarrollar curso aprende aplicaciones sql sql-server-2008-r2 pivot

sql - móviles - manual de programacion android pdf



Seleccionar declaración por grupo por total (1)

Tengo dos tablas Contact y Invoice enlazadas por ContactId

Por favor, mira el violín

Estoy seleccionando todos los contactos que han gastado más de 2500 por año y la consulta funciona bien.

Quería que se muestre en un formato a continuación.

Cualquier ayuda sobre esto usando sql-server . Puedo hacerlo fácilmente usando la pestaña cruzada de Crystal Reports, pero tratando de hacer algo solo usando SQL Server


Puede PIVOTAR , luego DESVÍE sus datos de su consulta original para obtenerlos en el formato deseado:

WITH T AS ( SELECT c.ContactID, ContactName = c.Name, Year = DATEPART(YEAR, i.InvDate), Invoices = CAST(COUNT(i.InvoiceID) AS FLOAT), InvTotal = CAST(SUM(i.InvTotal) AS FLOAT) FROM Invoice AS i INNER JOIN dbo.Contact AS c ON c.ContactID = i.InvContactID GROUP BY c.ContactID, c.Name, DATEPART(YEAR, i.InvDate) HAVING SUM(i.InvTotal) > 2000 ) SELECT ContactName = CASE WHEN pvt.Measure = ''InvTotal'' THEN '''' ELSE pvt.ContactName END, pvt.Measure, [2012] = ISNULL(pvt.[2012], 0), [2013] = ISNULL(pvt.[2013], 0), [2014] = ISNULL(pvt.[2014], 0) FROM T UNPIVOT ( Value FOR Measure IN ([Invoices], [InvTotal]) ) AS upvt PIVOT ( SUM(Value) FOR [Year] IN ([2012], [2013], [2014]) ) AS pvt ORDER BY pvt.ContactName, Measure;

Ejemplo en SQL Fiddle