我在重新格式化sql表时遇到了问题。 原始表格可以视为以下格式
index1 index2 item1 item2
01 001 10 100
02 001 10 100
...
01 002 20 200
02 002 20 200
...
我希望将其重新格式化为像
这样的表格index2 01item1 01item2 02item1 02item2 ...
001 10 100 10 100 ...
002 20 200 20 200 ...
...
索引1和索引2可以表示除主键之外的任何索引(例如我可以将它们称为颜色{红色,黄色,蓝色}和形状{方形,圆形,条形}),并且项目指示某些类型(在这个例子中你可以说是一个红色的圆圈),它包含哪些数据(例如,item1表示重量和数据为80,item2表示高度,数据为100等)
我已经查看了以下问题(Efficiently convert rows to columns in sql server),我相信我的解决方案应该存在但仍然无法解决,因为我无法理解如何使用数据透视,而且我认为我的情况甚至比那复杂。
可以安全地假设索引1中存在的索引总数在所有类型的index2中都是相同的(也就是说,如果在001中有10个index1,那么在002中将有10个索引1)孔)
(希望它不会让人们对我的问题更加困惑) 所以最后我想运行一个查询:
string builder sb = new string builder;
foreach(int indexNo2 in index2){
foreach(int indexNo1 in index1{
sb.append("select item1 as" + indexNo1+"item01, item2 as" +indexNo2+"item02
where index1 =" + indexNo1 + " and index2 =" + indexNo2 + "inner join");
}
sb.append("unit"+endl);
}
然而,这就是我想让结果看起来的样子,并不意味着我真的想在一天结束时构建如此长的查询。 PS。即使我尝试编写一个c#suitcode来构建查询,我想在sql中找到一个解决方案来重新格式化表
答案 0 :(得分:2)
You should achieve that using SQL query via Dynamic Pivot rather than C# this will help you to convert your rows to columns with great performance.
I got the same requirement before I have already solved as mentioned Convert Rows to columns in SQL with simple sample