C# 在c中使用for循环创建查询字符串
我想创建一个查询字符串,为我生成正确的语法 我想要实现的是:C# 在c中使用for循环创建查询字符串,c#,mysql,string,for-loop,append,C#,Mysql,String,For Loop,Append,我想创建一个查询字符串,为我生成正确的语法 我想要实现的是: select szallito_nev, sum(case extract(month from Beerkezes_datuma) when '1' then merlegelt_suly else 0 end) as 'Januar_szall_szly', sum(case extract(month from Beerkezes_datuma) when '2' then merlegelt_suly else 0 end)
select szallito_nev,
sum(case extract(month from Beerkezes_datuma) when '1' then merlegelt_suly else 0 end) as 'Januar_szall_szly',
sum(case extract(month from Beerkezes_datuma) when '2' then merlegelt_suly else 0 end) as 'Február_szall_szly',
sum(case extract(month from Beerkezes_datuma) when '3' then merlegelt_suly else 0 end) as 'Március_szall_szly',
sum(case extract(month from Beerkezes_datuma) when '4' then merlegelt_suly else 0 end) as 'Április_szall_szly',
sum(case extract(month from Beerkezes_datuma) when '5' then merlegelt_suly else 0 end) as 'Május_szall_szly',
sum(case extract(month from Beerkezes_datuma) when '6' then merlegelt_suly else 0 end) as 'Június_szall_szly',
sum(case extract(month from Beerkezes_datuma) when '7' then merlegelt_suly else 0 end) as 'Július_szall_szly',
sum(case extract(month from Beerkezes_datuma) when '8' then merlegelt_suly else 0 end) as 'Agusztus_szall_szly',
sum(case extract(month from Beerkezes_datuma) when '9' then merlegelt_suly else 0 end) as 'Szeptember_szall_szly',
sum(case extract(month from Beerkezes_datuma) when '10' then merlegelt_suly else 0 end) as 'Október_szall_szly',
sum(case extract(month from Beerkezes_datuma) when '11' then merlegelt_suly else 0 end) as 'November_szall_szly',
sum(case extract(month from Beerkezes_datuma) when '12' then merlegelt_suly else 0 end) as 'December_szall_szly',
sum(merlegelt_suly) as 'Év',
我想从当前挂载生成这些行。例如,如果是三月,我想获得循环生成代码到1-3等
我将从服务器上获取当前的mount nubmer
string sMonth = DateTime.Now.ToString("MM");
然后将其转换为循环的整数
int month = Convert.ToInt32(sMonth);
最后创建循环
for (int i = 0; i <= month; i++)
{
query1 = String.Format(@"select szallito_nev,
sum(case extract(month from Beerkezes_datuma) when '{0}' then merlegelt_suly else 0 end)
as '{1}_szall_szly',",i,i);
}
我知道它不起作用,但有什么办法可以做到这一点吗?很难说什么不起作用,但肯定有一件事似乎是错的,那就是 您已选择szallito_nev inside loop 试着这样做:
var query = "select szallito_nev ";
var queryConstructed = new StringBuilder();
for (int i = 0; i <= month; i++)
{
queryConstructed .Append( String.Format(@"sum(case extract(month from Beerkezes_datuma) when '{0}' then merlegelt_suly else 0 end) as '{1}_szall_szly',",i,i));
}
query += queryConstructed .ToString();
这可能会解决您的问题。您需要附加它们:
或者更好,只需按月份分组,这会改变数据的形状,请注意。坦率地说,由于月份数非常严格,我很想粘贴到SQL中…而不是.toString和Convert.ToInt32-您考虑过使用DateTime.Now.Month吗?@balage90注意:使用返回不同列数的查询通常会让人困惑;我强烈建议采用分组实施。而且您可能需要添加一些where子句,以确保您查询的日期范围正确,而不是每年的4月、5月等,因为这里缺少where子句,所以有一个grup,我忘了写在这里了!由szallito_nev集团和szallito_nev集团进行分组,并进行汇总@balage90那么为什么不也按月份分组呢,这样你就不需要编写复杂的sql了……我该如何在查询结束时得到月份名称呢?因为我必须从一个大数据库中创建一个每周和每月的摘要,并且我需要将表格转换成水平表格。看起来有点乱,但我找不到其他方法来做这件事。它们是基于公司的
var sql = new StringBuilder("select szallito_nev,");
for(int i = 1 ; i <= month ; i++)
{
sql.AppendLine().AppendFormat(
"sum(case extract(month from Beerkezes_datuma) when '{0}' then merlegelt_suly else 0 end) as '{1}_szall_szly',",
i, monthName[i-1]);
}
var query = sql.AppendLine().Append("sum(merlegelt_suly) as 'Év',").ToString();