我有一張表,用於存儲帳戶ID和值。一個帳戶可以有多行,每行一個值。我想創建查詢,這將使我每個帳戶ID一行,每個值的列(具有3個值的限制)如何獲取多行數據到不同的列
數據表樣品:
AccountID Value
8CD291F7-1A7E-409B-8D4C-7BECEE5DEBFB 34CD2F7D-E146-457E-B524-298D15EE0063
8CD291F7-1A7E-409B-8D4C-7BECEE5DEBFB 4FC58366-C797-4CAB-8A90-FE7425C1EDCD
8CD291F7-1A7E-409B-8D4C-7BECEE5DEBFB 10C64CEE-E026-4197-8BC9-CF5B0EE8ADBC
02423075-6C7D-4AEB-AE8C-059E43914D53 8327537F-B0CB-43A4-B9BC-31E0A6377F99
02423075-6C7D-4AEB-AE8C-059E43914D53 2EE12215-AF0D-4636-9E37-7F49EDA22AFF
BEE8C007-ECA3-4327-8248-A1A66925EE9E 8FC3D058-0AC8-4295-A34D-28755DB52F54
這裏是查詢我拿出這麼遠:
SELECT C1.AccountId, C1.Value Value1, C2.Value Value2, C3.Value Value3
FROM
TempTable C1
JOIN
TempTable C2 ON C2.AccountId = C1.AccountId AND C2.Value != C1.Value
JOIN
TempTable C3 ON C2.AccountId = C3.AccountId AND C3.AccountId = C1.AccountId AND C3.Value != C2.Value AND C3.Value != C1.Value
這裏是我遇到了迄今爲止的問題:
- 當我運行查詢有一個賬戶我有150條記錄。如果我在select語句中放置一個DISTINCT,它會返回6條記錄。
- 當我運行不同時它會爲每個可能的組合創建一個行。我不DISTINCT照顧令值列是
輸出(只有一個賬戶 - 將有每個賬戶行):
AccountId Value1 Value2 Value3
8CD291F7-1A7E-409B-8D4C-7BECEE5DEBFB 34CD2F7D-E146-457E-B524-298D15EE0063 4FC58366-C797-4CAB-8A90-FE7425C1EDCD 10C64CEE-E026-4197-8BC9-CF5B0EE8ADBC
8CD291F7-1A7E-409B-8D4C-7BECEE5DEBFB 34CD2F7D-E146-457E-B524-298D15EE0063 10C64CEE-E026-4197-8BC9-CF5B0EE8ADBC 4FC58366-C797-4CAB-8A90-FE7425C1EDCD
8CD291F7-1A7E-409B-8D4C-7BECEE5DEBFB 4FC58366-C797-4CAB-8A90-FE7425C1EDCD 34CD2F7D-E146-457E-B524-298D15EE0063 10C64CEE-E026-4197-8BC9-CF5B0EE8ADBC
8CD291F7-1A7E-409B-8D4C-7BECEE5DEBFB 4FC58366-C797-4CAB-8A90-FE7425C1EDCD 10C64CEE-E026-4197-8BC9-CF5B0EE8ADBC 34CD2F7D-E146-457E-B524-298D15EE0063
8CD291F7-1A7E-409B-8D4C-7BECEE5DEBFB 10C64CEE-E026-4197-8BC9-CF5B0EE8ADBC 34CD2F7D-E146-457E-B524-298D15EE0063 4FC58366-C797-4CAB-8A90-FE7425C1EDCD
8CD291F7-1A7E-409B-8D4C-7BECEE5DEBFB 10C64CEE-E026-4197-8BC9-CF5B0EE8ADBC 4FC58366-C797-4CAB-8A90-FE7425C1EDCD 34CD2F7D-E146-457E-B524-298D15EE0063
所需的結果(只有一個帳戶 - 將有每個賬戶行):
AccountId Value1 Value2 Value3
8CD291F7-1A7E-409B-8D4C-7BECEE5DEBFB 34CD2F7D-E146-457E-B524-298D15EE0063 4FC58366-C797-4CAB-8A90-FE7425C1EDCD 10C64CEE-E026-4197-8BC9-CF5B0EE8ADBC
這看起來類似PIVOT(您想行返回列)除了你基本上每個賬戶ID具有可變數量的列。 1有三列,2有兩列,3有一列,可能有4列有53列。由於給定的查詢必須爲每一行返回相同的模式,因此必須允許儘可能多的列數。這似乎不是一個理想的情況。也許需要重新考慮要求。 – pmbAustin
@pmbAustin:如果應該總是有3列,有幫助嗎?如果少於這個數字,返回一個NULL,如果還有更多,只取前3個。 – ferensilver
是的,這有幫助。這似乎是一個PIVOT的理想選擇。下面接受的答案是一種「手動支點」,這也可以...這是我在PIVOT/UNPIVOT可用之前總是做的。爲了將來的參考,像「每個ID最多三行」這樣的信息對於形成準確的答案非常有用。 – pmbAustin