如何将多列拆分为名称和值?

问题描述 投票:1回答:2

我有一张像这样的桌子:

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
  …      …       …       …

我知道如何将一列拆开,问题是当我尝试同时拆掉所有这些列时,我不知道如何使联合正常

sql sql-server multiple-columns unpivot
2个回答
1
投票

这会产生与交叉申请相同的结果吗?

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

Rextester Demo


0
投票

你可以用VALUES交叉申请

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

测试here

© www.soinside.com 2019 - 2024. All rights reserved.