[英]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.