Monday, July 27, 2009

Linq to SQL with GroupBy - SUM

http://csainty.blogspot.com/2008/01/linq-to-sql-groupby.html

Linq to SQL
var pcs = from a in db.Addresses
group a by a.PostalCode into g
select new {PostalCode = g.Key, Orders = (int?)g.Sum(addr =>addr.SalesOrderHeaders_ShipTo.Count) ?? 0, OrderValue = (decimal?)g.Sum(addr => addr.SalesOrderHeaders_ShipTo.Sum(o => o.SubTotal + o.Freight)) ?? 0m};

SQL
SELECT [t5].[PostalCode]
, COALESCE([t5].[value],@p0) AS [Orders]
, COALESCE([t5].[value2],@p1) AS [OrderValue]
FROM (
SELECT SUM([t4].[value2]) AS [value]
, SUM([t4].[value]) AS [value2]
, [t4].[PostalCode]
FROM (
SELECT (
SELECT SUM([t3].[SubTotal] + [t3].[Freight])
FROM [Sales].[SalesOrderHeader] AS [t3]
WHERE [t3].[ShipToAddressID] = [t2].[AddressID]
) AS [value]
, [t2].[PostalCode]
, [t2].[value] AS [value2]
FROM (
SELECT (
SELECT COUNT(*)
FROM [Sales].[SalesOrderHeader] AS [t1]
WHERE [t1].[ShipToAddressID] = [t0].[AddressID]
) AS [value]
, [t0].[AddressID]
, [t0].[PostalCode]
FROM [Person].[Address] AS [t0]
) AS [t2]
) AS [t4]
GROUP BY [t4].[PostalCode]
) AS [t5]

No comments:

Post a Comment