2013-12-23 391 views
0

我試圖將行轉換爲列。我基本上有很多行,其中每個N行意味着我想列爲結果集的表上的一行。我給一個簡單的例子:varchar列的動態樞軸

我有一個表的結構是這樣的:

Table structure

牢記我刪除大量的行來簡化這個例子。每6行表示在結果集中,我想是這樣的1行:

Desired output

  • 所有列是VARCHAR類型的(這就是爲什麼我不能把它與支點完成)
  • 數OS列是動態的,所以它的行的源表格數
  • 從邏輯上講,行(在結果集表中的行)數同樣動態
+1

您的設計有問題(除了需要動態SQL之外)。例如,什麼標識「DESCRIPTION」的「第一個」值與「第一個」值「CODE」一起?,沒有列可幫助您對行進行排序。你說「每6行意味着結果集中有1行」,但是我們沒有辦法將這6行組合在一起,沒有表格的「自然順序」這樣的事情,我們需要實際的順序 – Lamak

+0

正如我所說的,我刪除了行(以及列)來簡化我的示例。我的應用根據另一個列表將自己的行添加到表中。所以保證我的數據表中每N行有一行表格。 – Elarrat

回答

0

我真的做到了。 我根據爲結果集註冊的列數來編寫SQL。這樣我就可以根據讀取的值爲N列編寫動態SQL子句。最後,我只是將結果集插入臨時表中,然後,

謝謝反正!

1

(不是一個真正的答案,但我t是我得到的。)

這是一個名稱/值對錶,對嗎?你的查詢需要一些東西來標識哪個「集合」的行是相互關聯的。沒有這樣的事情,我看不出如何寫入查詢。關鍵因素是,您絕不能假定數據將以任何特定順序從SQL(至少Server)返回。數據如何一般存儲在內部,但並非總是如此,這決定了未指定訂單時的返回方式。

另一個考慮:如果(何時?)某行缺失 - 比方說產品4沒有價格B列?這將打破一個簡單的「每六行」規則。 「從每一個新的代碼行開始新鮮」如果錯過了一個代碼或者當(不是如果)數據沒有按照預期的順序返回,它會有問題嗎?

如果你有一些分組項目的方法,讓我們知道一個更新的問題,但否則我不認爲這一個是特別可以解決的。

+0

這樣的問題的常見答案是「標準化您的數據」,通過創建一個表格(說)這六列。唉,對這樣的答案的普遍答覆是「我不能改變表格結構」。但是,如果您需要以「pivoted」形式處理大量數據,則應認真考慮提高表格結構。 –

+0

正如我上面的評論所說,我的應用程序本身添加了行,所以我可以相信我的結果集中的每一行都會有N個數據錶行。 – Elarrat