Как выбрать строку TABLE, а затем вставить в другой - PullRequest
0 голосов
/ 10 сентября 2018

IN SQL SERVER 2014.

Запрос SQL

Я хочу создать таблицу FCD_Assembly с двумя таблицами FCD и Assembly.

мой стол вот так:

====================== || Сборка ТАБЛИЦА || =========================

+-------------+-------+-------+-------+-------+-------+
| ID_Assembly | Col_1 | Col_2 | Col_3 | Col_4 | Col_5 |
+-------------+-------+-------+-------+-------+-------+
| 1200        | 0     | 0     | 1     | 0     | 0     |
| 1201        | 1     | 0     | 0     | 0     | 1     |
| 1202        | 0     | 1     | 0     | 0     | 0     |
| 1203        | 0     | 0     | 0     | 1     | 0     |
| 1204        | 0     | 1     | 0     | 0     | 1     |

====================== || FCD TABLE || =========================

+--------+--------+------+
| ID_FCD | Tittle | type |
+--------+--------+------+
| 1      | Col_1  | F    |
| 2      | Col_2  | F    |
| 3      | Col_3  | F    |
| 4      | Col_4  | C    |
| 5      | Col_5  | D    |

====================== || FCD_Assembly TABLE || =========================

+-------------+-------------+
| ID_FCD      | ID_Assembly |
+-------------+-------------+
| 3           | 1200        |
| 1           | 1201        |
| 5           | 1201        |
| 2           | 1202        |
| 4           | 1203        |
| 2           | 1204        |
| 5           | 1204        |

Я хочу создать таблицу FCD_Assembly

спасибо за вашу помощь:)

1 Ответ

0 голосов
/ 10 сентября 2018

Вам необходимо использовать unpivot для таблицы Assembly, чтобы имя столбца соответствовало значению строки, а затем сделать join с таблицей FCD.

Я бы использовал CROSS APPLY, чтобы сделать unpivot.

SELECT f.ID_Assembly,t1.id 
FROM (
    select v.* from Assembly CROSS APPLY 
    (
        VALUES 
        (ID_Assembly,Col_1,'Col_1'),
        (ID_Assembly,Col_2,'Col_2'),
        (ID_Assembly,Col_3,'Col_3'),
        (ID_Assembly,Col_4,'Col_4'),
        (ID_Assembly,Col_5,'Col_5')
    )  v (id,val,Title)
    WHERE v.val <> 0
)t1 JOIN FCD f on t1.Title = f.Tittle

sqlifddle

Результат

ID_FCD  ID_Assembly
3       1200
1       1201
5       1201
2       1202
4       1203
2       1204
5       1204
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...