#sql #sql-server
#sql #sql-сервер
Вопрос:
Я хотел бы отключить SQL-таблицу вокруг нескольких столбцов. Я пробовал обычную инструкцию UNPIVOT, но она содержит только одно значение. Смотрите, например, эту ссылку: https://codingsight.com/understanding-pivot-unpivot-and-reverse-pivot-statements .
Я попытался проиллюстрировать свои данные, а также желаемый результат на рисунке ниже. Верхняя таблица представляет собой образец данных в таблице SQL. Я использовал 3 материала, но на самом деле их 20.
Нижняя таблица — мой желаемый результат.
Данные находятся на сервере SQL 2008-r2.
Любые указания о том, как выполнить эту задачу?
Ответ №1:
Рассмотрите возможность использования cross apply
, например, так:
select t.date, t.product, x.*
from mytable t
cross apply (values
(container1material, container1amount),
(container2material, container2amount),
(container3material, container3amount)
) x(material, amount)
Ответ №2:
Использовать apply
для открепления:
select t.date, t.product, v.*
from t cross apply
(values (container1amount, container1material),
(container2amount, container2material),
(container3amount, container3material)
) v(containeramount, containermaterial);
unpivot
это пользовательский синтаксис (нестандартный), и он выполняет только одно. Напротив, боковые соединения очень мощные, и открепление — это единственное, что вы можете с ними сделать. Apply
стоит изучить.