Отключить SQL-таблицу с несколькими столбцами

#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 стоит изучить.