Sql-Server
使用 SELECT INTO 從現有表建構橋表
我有一個大源表,其中屬性與度量混合在一起。我想用它們製作一個橋接表來分析數據。
問題(在我的例子中 N 實際上是 22,id_column 引用同一張表)
|id | id_column1 | id_column2 | id_columnN | stuff | +---+------------+------------+------------+--------| | 1 | 2017 | 2024 | 1452 | red | | 2 | 4125 | NULL | 5234 | blue | | 3 | NULL | 5234 | 7234 | pink |
我只想從上面建構一個橋接表,但我不想以這種方式提取所有列,我的目標是有一些類似的東西:
|idT1| idT2 | +----+------+ | 1 | 2017 | | 1 | 2024 | | 1 | 1452 | | 2 | 4125 | | 2 | NULL | | 2 | 5234 |
等等。我只想從上面問題中的數據建構這樣的橋接表,然後用足夠的表引用 idT1 和 idT2。
我的想法: - 使用數據透視表確實失敗了,因為我需要映射所有的 id 值。- 我正在考慮使用一些游標將所有結果映射到一個以 id 值為界的變數中,但它也對我不起作用。
提前感謝您的時間和幫助!
我建議您使用 WHILE 來使用迭代解決方案,而不是使用 CURSOR。
CREATE TABLE MEASURES (id int, id_column1 int, id_column2 int, id_column3 int, stuff varchar(20)); INSERT INTO MEASURES VALUES (1, 2017, 2024, 1452, 'red'), (2, 4125, NULL, 5234, 'blue'), (3, NULL, 5234, 7234, 'pink'); GO
CREATE TABLE BRIDGE (id int, idc int); GO
DECLARE @idColumn INT = 1; DECLARE @cmd VARCHAR(MAX) = ''; WHILE @idColumn <= 3 BEGIN SET @CMD = 'INSERT INTO BRIDGE' + ' SELECT id, id_column' + CAST(@idColumn AS VARCHAR(10)) + ' FROM MEASURES' -- uncomment to remove NULL values --+ ' WHERE id_column' --+ + CAST(@idColumn AS VARCHAR(10)) --+ ' IS NOT NULL;'; EXEC (@CMD); SET @idColumn = @idColumn + 1; -- uncomment to check SQL statements --SELECT @CMD; END SELECT * FROM BRIDGE ORDER BY id; GO
編號 | 國際數據中心 -: | ---: 1 | 2017 1 | 2024 1 | 1452 2 | 5234 2 | *空值* 2 | 4125 3 | *空值* 3 | 5234 3 | 7234
dbfiddle在這裡