SQL组三列合为一

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

我有一个包含三列的表:

[ID]  [name]         [link]
1     sample_name_1  sample_link_1
2     sample_name_2  sample_link_2
3     sample_name_3  sample_link_3

我需要以某种方式将它们分组为一列,所以理想的结果是这样:

[one_column]
1
sample_name_1
sample_name_1
2
sample_name_2
sample_link_2
3
sample_name_3
sample_link_3

您对在Microsoft SQL中的外观和如何完成有任何建议吗?

sql sql-server group-by sql-order-by
1个回答
0
投票

您可以尝试将VALUES表值构造函数与CROSS APPLY结合使用:

SELECT v.one_column
FROM Table t
CROSS APPLY (VALUES 
  (1, CONVERT(varchar(50), ID)), 
  (2, CONVERT(varchar(50), name)), 
  (3, CONVERT(varchar(50), link))
) v (rn, one_column)
ORDER BY t.ID, v.rn

0
投票

虽然这是您应该在表示层(即您的应用或网站)中执行的操作,但是可以在SQL中执行此操作:

select one column
from
(
  select cast(id as varchar(10)) as one column, id as sortkey1, 1 as sortkey2 from mytable
  union all
  select name as one column, id as sortkey1, 2 as sortkey2 from mytable
  union all
  select link as one column, id as sortkey1, 3 as sortkey2 from mytable
) unioned
order by sortkey1, sortkey2;
© www.soinside.com 2019 - 2024. All rights reserved.