oracle查同比增长_oracle 拼同比环比查询sql

///

///生成计算同比环比查询语句///table:表名称;statColumns:要统计的值字段;yearColumn:年份字段名;monthColumn:月份字段名;joinColumns:除年月外的连接条件///--上期无值或0本期有值不为0:1///--上期有值不为0本期无值或0:-1///--上期本期都无值或都为0:null///--上期本期都有值且都不为0:(本期-上期)/上期///

public string GenerateOracleStatSql(string table, string[] statColumns, string[] joinColumns, string yearColumn, stringmonthColumn)

{if (string.IsNullOrEmpty(table) || statColumns == null || statColumns.Length == 0)

{return null;

}string mainTableName = "m"; //主表别名

string tbTableName = "t";//同比表别名

string hbTableName = "h";//环比表别名

StringBuilder sql = newStringBuilder();//查询

sql.Append("select");//查询年月以外的字段//查询年月

foreach (string column injoinColumns)

{

sql.AppendFormat("{0}.{1},", mainTableName, column);

}

sql.AppendFormat("{0}.{1},{0}.{2}", mainTableName, yearColumn, monthColumn);//查询主表统计字段

foreach (string column instatColumns)

{

sql.AppendFormat(",{0}.{1}", mainTableName, column);

}//查询同比,环比

foreach (string column instatColumns)

{//同比

sql.AppendFormat(",decode(nvl({0}.{2}, 0),0,decode(nvl({1}.{2}, 0), 0, null, 1),decode(nvl({1}.{2}, 0),0,-1,({1}.{2} - {0}.{2}) / {0}.{2})) {2}_TB", tbTableName, mainTableName, column);//环比

sql.AppendFormat(",decode(nvl({0}.{2}, 0),0,decode(nvl({1}.{2}, 0), 0, null, 1),decode(nvl({1}.{2}, 0),0,-1,({1}.{2} - {0}.{2}) / {0}.{2})) {2}_HB", hbTableName, mainTableName, column);

}string tbwhere = "";string hbwhere = "";foreach (string column injoinColumns)

{

tbwhere+= string.Format("and {0}.{1} = {2}.{1}", mainTableName, column, tbTableName);

hbwhere+= string.Format("and {0}.{1} = {2}.{1}", mainTableName, column, hbTableName);

}//要查询的表和连接条件

sql.AppendFormat(@"from {0} {1}

left join {0} {2}

on to_number({1}.{4}) = to_number({2}.{4}) + 1

and to_number({1}.{5}) = to_number({2}.{5}) {6}

left join {0} {3}

on to_number({1}.{4}) * 12 + to_number({1}.{5}) =

to_number({3}.{4}) * 12 + to_number({3}.{5}) + 1 {7}

order by to_number({1}.{4}), to_number({1}.{5})", table, mainTableName, tbTableName, hbTableName, yearColumn, monthColumn, tbwhere, hbwhere);returnsql.ToString();

}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部