【问题标题】:How to convert a single row table into columns?如何将单行表转换为列?
【发布时间】:2021-12-31 20:01:59
【问题描述】:

我有一个单行查询以这种格式返回数据:

Col1    Col2    Col3    Col4
-----------------------------
1425    3454    2345    3243

我希望它以这种格式显示:

Col1  |  1425
Col2  |  3454
Col3  |  2345
Col4  |  3243

我该怎么做?

我避免使用UNION 方法,因为上表是从查询中提取的,对于每个<table_name>,我都必须粘贴表查询,这会使处理过程变慢。

【问题讨论】:

  • 在这种情况下,查看原始查询可能会让某人更容易提出建议。
  • 您可能正在寻找 SQL Server 的 UNPIVOT,但您也需要一个键列。
  • 这能回答你的问题吗? SQL Server : Columns to Rows
  • 根据问题指南,请展示您的尝试并告诉我们您发现了什么(在本网站或其他地方)以及为什么它不能满足您的需求。
  • 如果你不想取消透视,你可以为每一列做联合。比如 select 'col1' , Col1 from tbl union all select 'col2' , Col2 from tbl

标签: sql sql-server tsql transpose


【解决方案1】:

如果每个表的字段数始终保持不变,那么它可能会像这样工作。

DECLARE @Table TABLE(
    [Col1] int,
    [Col2] int,
    [Col3] int,
    [Col4] int
)

INSERT INTO @Table VALUES(1425, 3454, 2345, 3243); -- some Test data

SELECT * FROM @Table; -- row

SELECT 
    p.[Columns],
    p.[Value]
FROM (
    SELECT 
        [Col1],
        [Col2],
        [Col3],
        [Col4]
    FROM @Table
) x
UNPIVOT(
    [Value] FOR [Columns] IN ([Col1],[Col2],[Col3],[Col4]) -- 
) AS P;

【讨论】:

    【解决方案2】:

    您可以将查询与列名交叉连接,以便在单独的行中显示列值:

    select
      columns.col,
      case columns.col
        when 'Col1' then q.col1
        when 'Col2' then q.col2
        when 'Col3' then q.col3
        when 'Col4' then q.col4
      end as value
    from ( <your query here> ) q
    cross join ( values ('Col1'), ('Col2'), ('Col3'), ('Col4') ) as columns(col);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-11
      相关资源
      最近更新 更多