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;