我在SQL Server中有一個凌亂的表(對不起,這是我從供應商那裏得到的)。我已經大大地減弱了它,這樣我就可以專注於這個問題,但我明顯失去了樹木的森林。Unpivot凌亂的表
客觀:排序這種數據,雖然我似乎無法得到正確的邏輯。
問題:奇怪的是,我需要列標題的子字符串作爲數據的一部分 - 正如您可以在下面的示例中看到的那樣。
Rextester樣本數據http://rextester.com/live/PHXT48379
我的表,一旦進口看起來像這樣:
+----+----------+--------------------+--------------------+-------------------+-------------------+
| id | person | contact 1 - phone | contact 2 - phone | contact 1 - email | contact 2 - email |
+----+----------+--------------------+--------------------+-------------------+-------------------+
| 1 | john doe | 123456 | 234567 | [email protected] | [email protected] |
| 2 | jane doe | 654321 | 765432 | [email protected] | NULL |
+----+----------+--------------------+--------------------+-------------------+-------------------+
預期輸出:
+----+----------+---------------+--------+-------------------+
| id | person | contactNumber | phone | email |
+----+----------+---------------+--------+-------------------+
| 1 | John Doe | 1 | 123456 | [email protected] |
| 1 | John Doe | 2 | 234567 | [email protected] |
| 2 | Jane Doe | 1 | 654321 | [email protected] |
| 2 | Jane Doe | 2 | 765432 | [email protected] |
+----+----------+---------------+--------+-------------------+
我需要去動態 - 所以這似乎是有道理的。仍然需要消化這一點。我喜歡你的許多答案(已經發現一個公平的份額)都使用相同的工具 - 作爲XML,CROSS APPLY節點。 – Eli
@Eli如您所知,SQL Server是按設計聲明的。您當然會使用經典的DYNAMIC SQL(這可能更具性能),但我喜歡XML方法的是沒有範圍問題,XML /源代碼可以是表格,視圖,甚至是具有派生列的自定義查詢。例如,我有一個Table-Value函數,它將幾乎任何選擇轉換爲EAV結構。作爲TVF,它可以合併到CROSS APPLY中或由另一個查詢使用。 –
我試圖將你的概念實現到真實的數據集中,但是,我遇到了一些問題,其中「contactnumber」字段帶回了非數字值,並且他們打破了查詢失敗的轉換等。我添加了所有字段我不希望在第二個跨應用中「未插入」到「未插入」部分,但無濟於事:( – Eli