Dynami c рекомендации по данным
Вы можете получить счетчик и использовать StringBuilder
для генерации strSQL
.
StringBuilder strSQL = new StringBuilder();
int DataAmount = 3;// a,b,c,d,e
Dictionary<int, string> dic = new Dictionary<int, string>();
dic.Add(0 ,"a");
dic.Add(1, "b");
dic.Add(2, "c");
strSQL.Append("select ");
strSQL.Append(" isnull(a.Column2,b.Column2) Column0,isnull(a.Column1,0) Column1 ");
//dic.Count > 2
for (int i = 1; i < dic.Count; i++)
{
strSQL.Append(",isnull("+dic[i]+".Column1,0) Column"+i+" ");
}
strSQL.Append(" from (SELECT ID,Column1,Column2 FROM [dbo].[20200618] UNPIVOT(Column1 for Column2 in ([Annual],[Revenue],[Completed]))b where ID=1) a ");
for (int j = 1; j < dic.Count; j++)
{
strSQL.Append("FULL JOIN (SELECT ID, Column1, Column2 FROM[dbo].[20200618] UNPIVOT(Column1 for Column2 in ([Annual],[Revenue],[Completed])) " + dic[j] + " where ID = " + (j+1)+ ") " + dic[j] + " on a.Column2 = " + dic[j]+".Column2 ");
}
// SqlHelper.ExcuteNoQuery(strSQL.ToString());
SQL Часть запроса
Данные на моем azure sqlserver.

При запуске SELECT *FROM [dbo].[20200618]
.

Выполнить SELECT ID,Column1,Column2 FROM [dbo].[20200618] UNPIVOT(Column1 for Column2 in ([Annual],[Revenue],[Completed]))b where ID=2
.

Наконец, запустите код.
select isnull(a.Column2,b.Column2) Column0,isnull(a.Column1,0) Column1,isnull(b.Column1,0) Column2,isnull(c.Column1,0) Column3 from (SELECT ID,Column1,Column2 FROM [dbo].[20200618] UNPIVOT(Column1 for Column2 in ([Annual],[Revenue],[Completed]))b where ID=1) a FULL JOIN (SELECT ID,Column1,Column2 FROM [dbo].[20200618] UNPIVOT(Column1 for Column2 in ([Annual],[Revenue],[Completed]))b where ID=2) b on a.Column2=b.Column2 FULL JOIN (SELECT ID,Column1,Column2 FROM [dbo].[20200618] UNPIVOT(Column1 for Column2 in ([Annual],[Revenue],[Completed]))b where ID=3) c on a.Column2=c.Column2
