如何将多个列取消透视成名称和值?

时间:2018-12-07 16:15:39

标签: sql sql-server multiple-columns unpivot

我有一张这样的桌子:

Dates   Time    Item1   Item2   Item3
1-Jan   0:00    Bread   Bread   Peach
1-Jan   6:00    Lemon   Peach   Peach
1-Jan   12:00   Lemon   Bread   Bread
1-Jan   18:00   Bread   Lemon   Peach
2-Jan   0:00    Bread   Lemon   Peach
2-Jan   6:00    Bread   Lemon   Peach
  …      …        …       …       …

我想实现这一目标:

Dates   Times   Item    Food
1-Jan   0:00    Item1   Bread
1-Jan   0:00    Item2   Bread
1-Jan   0:00    Item3   Peach
1-Jan   6:00    Item1   Lemon
1-Jan   6:00    Item2   Peach
  …      …       …       …

我知道如何解开一列,问题是当我尝试同时解开所有列时,我不知道如何正确地建立联合

2 个答案:

答案 0 :(得分:1)

这会产生与交叉应用相同的结果吗?

SELECT Dates, Time, Item, Food
From mytable
unpivot (
Food
for [Item] in ([Item1],[Item2],[Item3])
)AS p 

Rextester Demo

答案 1 :(得分:0)

您可以将其与VALUES交叉应用

SELECT Dates, [Time], Item, Food
FROM yourtable
CROSS APPLY (VALUES 
            ('Item1', Item1),
            ('Item2', Item2),
            ('Item3', Item3)) as Items(Item, Food);

测试here