Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在c中使用for循环创建查询字符串_C#_Mysql_String_For Loop_Append - Fatal编程技术网

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();