【问题标题】:How can I unpivot multiple columns into name and value?如何将多个列转为名称和值?
【发布时间】:2018-12-07 16:15:38
【问题描述】:

我有一张这样的桌子:

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


    【解决方案1】:

    这会给出与交叉应用相同的结果吗?

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

    Rextester Demo

    【讨论】:

    • 没有。它是您问题的另一个答案,这是另一种可能性。
    【解决方案2】:

    您可以将其与 VALUES 交叉应用

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

    测试here

    【讨论】:

    • 谢谢,我没有考虑过交叉申请。它给了我一个错误,说'('附近的语法不正确。你知道它是什么吗?
    • @zhivab 当我尝试使用示例数据时,它对我有用。 And it's been in Microsoft SQL Server for a long time,所以我怀疑这是因为您的版本不支持它...您确定除了将表名更改为表之外,您没有添加额外的东西吗?
    • 是的,我确定。我仍然有同样的错误。我的 SQL Server 版本是 SQL Server Management Studio v17.7
    • 有趣的是,我刚刚解决了another question 关于你遇到的那个错误。事实证明,因为他连接到 Azure SQL 数据仓库,所以使用 VALUES 并没有完全实现。
    猜你喜欢
    • 2020-01-27
    • 2020-12-11
    • 2023-04-07
    • 1970-01-01
    • 2018-01-12
    • 2019-06-13
    • 2020-08-15
    • 1970-01-01
    • 2017-12-19
    相关资源
    最近更新 更多