[英]Group by Month in SQL statement
我目前正在嘗試通過選擇SQL語句進行分組。 我想做的是一年內有12個月的時間。 在一個月之內,我總結了所有外發物料並顯示為條形圖。 這是我設置SQL語句的方式:
public List<ProductPacking> getSumProductByMonth(string prodName)
{
List<ProductPacking> ft = new List<ProductPacking>();
using (var connection = new SqlConnection(FoodBankDB.connectionString))
{
SqlCommand command = new SqlCommand("SELECT SUM(Convert(INT, ddi.productQuantity)) AS totalQuantity, p.name, month(d.deliveryDate) AS deliveryMonth FROM dbo.DistributionDistributedItems ddi " +
" INNER JOIN dbo.ProductVariants pv ON ddi.productVariant = pv.id " +
" INNER JOIN dbo.Products p ON pv.product = p.id " +
" INNER JOIN dbo.Distributions d ON ddi.distribution = d.id " +
" WHERE p.name = '" + prodName + "' AND year(deliveryDate) < GETDATE() " +
" GROUP BY p.name, month(d.deliveryDate)", connection);
connection.Open();
using (var dr = command.ExecuteReader())
{
while (dr.Read())
{
DateTime deliveryMonth = DateTime.ParseExact(dr["deliveryMonth"].ToString(), "MMMM", CultureInfo.InvariantCulture);
ft.Add(new ProductPacking(Convert.ToInt32(dr["totalQuantity"].ToString()), deliveryMonth));
}
}
}
return ft;
}
在調試模式下,它向我返回的deliveryMonth為1/1/0001 12:00:00 AM,這是不正確的。 我確定我在數據庫中存儲了正確的日期格式。 我測試了查詢,它返回了正確的數據。 只是日期格式有錯誤。
我試圖將日期格式設置為一月,二月等。 但是,它向我返回一條錯誤消息,即String未被識別為有效的DateTime。 我不知道為什么會這樣,因為我設法按年進行解析,這是我的另一項職能。
提前致謝。
使用DATENAME函數更改SQL語句以按月份名稱對數據進行分組:
SqlCommand command = new SqlCommand("SELECT SUM(Convert(INT, ddi.productQuantity)) AS totalQuantity, p.name, DATENAME(MONTH,d.deliveryDate) AS deliveryMonth FROM dbo.DistributionDistributedItems ddi " +
" INNER JOIN dbo.ProductVariants pv ON ddi.productVariant = pv.id " +
" INNER JOIN dbo.Products p ON pv.product = p.id " +
" INNER JOIN dbo.Distributions d ON ddi.distribution = d.id " +
" WHERE p.name = '" + prodName + "' AND year(deliveryDate) < GETDATE() " +
" GROUP BY p.name, DATENAME(MONTH,d.deliveryDate)", connection);
並將dr["deliveryMonth"]
傳遞給ProductPacking
構造函數:
while (dr.Read())
{
ft.Add(new ProductPacking(Convert.ToInt32(dr["totalQuantity"].ToString()), dr["deliveryMonth"].ToString()));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.