【问题标题】:SQL server - How to split one column into more columns?SQL server - 如何将一列拆分为多列?
【发布时间】:2020-05-04 12:10:13
【问题描述】:

我有这个问题:

select plantnaam, plantmaat, stapel, hoeveelheid
from kist
where rij = '11'
order by stapel ASC, datum DESC

.

我想要实现的是给“Stapel”列的每个数字一个单独的列,填充“plantnaam + plantmaat + hoeveelheid”列的信息。像这样:

是否可以创建这样的查询?任何帮助将不胜感激。

【问题讨论】:

  • 这看起来不像您希望将一列变成多列,这看起来像是您尝试将许多列连接成一个,并将行移动到列。标题和图片讲述了完全不同的故事。什么是实际上正确的?
  • @larnu 嗨,我很抱歉没有说清楚。最后一张图片是我想要在这里实现的。

标签: sql sql-server tsql group-by pivot


【解决方案1】:

如果我正确地关注了你,你可以使用row_number()和条件聚合来做到这一点:

select
    max(case when stapel = 1 then concat_ws(' ', plantnaam, plantmaat, hoeveelheid) end) col1,
    max(case when stapel = 2 then concat_ws(' ', plantnaam, plantmaat, hoeveelheid) end) col2,
    max(case when stapel = 3 then concat_ws(' ', plantnaam, plantmaat, hoeveelheid) end) col3,
    max(case when stapel = 4 then concat_ws(' ', plantnaam, plantmaat, hoeveelheid) end) col4,
    max(case when stapel = 5 then concat_ws(' ', plantnaam, plantmaat, hoeveelheid) end) col5
from (
    select 
        t.*, 
        row_number() over(partition by stapel order by plantnaam, plantmaat, hoeveelheid) rn
    from mytable t
) t
group by rn

row_number()order by 子句控制结果集中显示的顺序行;您可能希望根据您的确切要求对其进行调整。

【讨论】:

    【解决方案2】:

    这可以通过在 SQL Server 中使用 PIVOT 来解决。

    要了解 Pivot,请使用下面已回答的链接

    Understanding PIVOT function in T-SQL

    【讨论】:

      【解决方案3】:

      您可以使用旧式的 max/sum(当钉书钉 = 1 时的情况,然后是 plantnaam+' '+plantmaat+' '+hoeveelheid end)作为 1 并按钉书钉分组并使用 repeat 运算符多次打印行。 或者如上所述,您可以使用 PIVOT 运算符。

      这里假设 plantmaat 列是字符串类型,否则您必须使用转换函数将数字转换为字符串。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-02
        • 1970-01-01
        • 2020-02-10
        • 1970-01-01
        相关资源
        最近更新 更多