2016-07-11 26 views
0

我已經面臨重新格式化sql表格的問題。 原始表可以看成是在以下格式基於他們的索引將行項目變成列項目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中索引的總數在各種索引2中是相同的(也就是說,如果在001中有10個索引1,那麼在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。儘管我試圖編寫ac#suitcode來構建查詢,但我想在sql中找到一個解決方案來重新格式化表格

+0

您可以添加一些示例代碼(你有什麼企圖到目前爲止)已經解決。樞軸可能是這樣做的方式。但是 - 也許非SQL方式會更好(例如編程語言R有一個熔化命令)。很難理解你想要什麼......像index1和item1這樣的術語表明術語不匹配(SQL索引?)。索引{1}是否表示主鍵(或鍵)和項{n}是否表示非關鍵數據?謝謝。 – ripvlan

+0

下劃線意味着空間,因爲如果你只在那裏添加空格,那麼表單不會顯示差異 – n4feng

+0

讓我添加一些套裝代碼 – n4feng

回答

2

您應該使用SQL查詢通過Dynamic Pivot而不是C#來實現這一點,這將幫助您將您的行轉換爲性能卓越的列。

我得到了同樣的要求之前,我提到Convert Rows to columns in SQL with simple sample

+0

非常感謝。這正是我正在尋找 – n4feng

+0

如果你upvote我的答案,並將其設置爲答案,請 – DevoWorx