Pivot и Unpivot в SQL с двумя таблицами (транспонирование значений в заголовки столбцов) - PullRequest
0 голосов
/ 17 мая 2018

У меня есть две таблицы.Первая таблица содержит товары и их атрибуты.Вторая таблица содержит метаданные для атрибутов.Пример данных ниже:

1.

+-----------------------------------+------------+--------+------------+
|               Product             | Level1     | Level2 |SKU         |
+-----------------------------------+------------+--------+------------+
| Hard Drive                        | 2.5        |    6   |342-0429    |
+-----------------------------------+------------+--------+------------+
| Hard Drive                        | 3.5        |    6   |342-0445    |
+-----------------------------------+------------+--------+------------+

2.

+-----------------------------------+------------+--------+
|               Product             | Level1     | Level2 |
+-----------------------------------+------------+--------+
| Hard Drive                        | FormFactor | Speed  |
+-----------------------------------+------------+--------+

Я хочу, чтобы вывод был в следующем формате:

+-----------------------------------+------------+--------+------------+
|               Product             | FormFactor | Speed  |SKU         |
+-----------------------------------+------------+--------+------------+
| Hard Drive                        | 2.5        |    6   |342-0429    |
+-----------------------------------+------------+--------+------------+
| Hard Drive                        | 3.5        |    6   |342-0445    |
+-----------------------------------+------------+--------+------------+

Нужна помощь по этому вопросу.Я проверил Pivot и Univivot в SQL, однако большинство решений указывают на это с 1 таблицей.Я не сталкивался с решением, которое использует две таблицы в качестве сценария выше.Я хотел знать, есть ли какой-либо запрос к выводу по мере необходимости, а не создавать новую таблицу, изменяющую все имена столбцов или использующую alter для изменения существующей таблицы.Это был просто образец таблицы с одним продуктом.Однако фактическая таблица содержит около 20 продуктов с тысячами SKU и их атрибутами.

1 Ответ

0 голосов
/ 17 мая 2018

Пример данных

 DECLARE @Table1 AS TABLE
  (
  Product varchar(100),
  Level1 DEcimal(2,1),
  Level2  INT,SKU varchar(100)
  )
  INSERT INTO @Table1
  SELECT 'Hard Drive',2.5,6,'342-0429'    UNION ALL
  SELECT 'Hard Drive', 3.5,6,'342-0445'    

  DECLARE @Table2 AS TABLE
  (
  Product varchar(100),
  Level1 varchar(100),
  Level2 varchar(100)
  )
  INSERT INTO @Table2
  SELECT 'Hard Drive','FormFactor','Speed'

Попробуйте этот скрипт ниже

 SELECT [Product],[FormFactor],[Speed],SKU
  FROM
  (
  SELECT A.Product,
         A.Level1 ,
         A.Level2 ,
         B.Level1 As BFormFactor,
         B.Level2 AS BSpeed,
         A.SKU
  FROM @Table1 A
  JOIN @Table2 B
   ON A.Product=b.Product
   )
   AS SRc
   PIVOT 
   (
   MAX(Level1) FOR BFormFactor IN([FormFactor])
   )Pvt
    PIVOT 
   (
   MAX(Level2) FOR BSpeed IN([Speed])
   )Pvt2

Результат, Демо: http://rextester.com/OOLVX55531

Product     FormFactor  Speed   SKU
------------------------------------------
Hard Drive  2.5          6      342-0429
Hard Drive  3.5          6      342-0445
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...