0

我想创建一个查询字符串,它会为我生成正确的语法!

我想要实现的是这样的:

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 等等..

我将从

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

我知道它不起作用,但有什么办法可以做到这一点?

4

2 回答 2

1

很难说什么不起作用,但肯定有一件事似乎是错误的,那就是你循环中有“select szallito_nev”。

尝试这样的事情:

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

可能会解决您的问题。

于 2013-11-07T11:20:43.397 回答
1

您需要附加它们:

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

或者也许更好,只是group by一个月(这会改变数据的形状,注意)。

于 2013-11-07T11:21:02.243 回答